Files
gutachten_t3/packages/gutachten/Classes/Downloads/ExcelNutzflaeche.php
T

289 lines
12 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace HermannTelser\Gutachten\Downloads;
use HermannTelser\Gutachten\DB\DbFunction;
use HermannTelser\Gutachten\DB\Select\ObjekteExcel;
use HermannTelser\Gutachten\DB\Select\Select;
use HermannTelser\Gutachten\Utility\Message;
use Mpdf;
use PhpOffice\PhpSpreadsheet\IOFactory;
// Mpdf installed by typo3 extension
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use TYPO3\CMS\Core\Utility\GeneralUtility;
class ExcelNutzflaeche
{
/**
* @return array
*/
public static function download()
{
// Message::debug(__file__,__line__, "DOWNLOAD SPREAD SHEET");
DbFunction::$debug = 0;
$projektid = GeneralUtility::_GP('projekt_aktive');
if (0 == $projektid or !is_numeric($projektid)) {
die('aktive projekt ID fehlt!');
}
$_projekt = DbFunction::select(
'tx_gutachten_projekte',
['id', 'auftraggeber_id', 'gutachter_id', 'intname', 'name', 'beschreibung', 'erstellung', 'onoff', 'upload', 'allgemeinupload', 'recalculate', 'zuabTitel', 'nwbTitel', 'zustTitel', 'allgemTitel', 'loggia_title', 'nwbStartSeite', 'm1pP', 'm5pP', 'timestamp', 'status', 'erstelldatum'],
['id' => $projektid]
);
$projektname = str_replace(',', '', $_projekt[0]['name']);
$projektname = preg_replace("'\W, '", '', $projektname);
$file = file_get_contents(__DIR__.'/excel_header.txt');
$file = preg_replace("/[\n\r]/", '', $file);
$_headers = explode(',', $file);
//
// // Create new Spreadsheet object
$spreadsheet = new Spreadsheet();
// Set document properties
$spreadsheet->getProperties()->setCreator('Hermann Telser Nutzwertberechnung')
->setLastModifiedBy('Hermann Telser Nutzwertberechnung')
->setTitle('Nutzwertberechnung')
->setDescription('Nutzwertberechnung v10.1.3, © Hermann Telser 2007 - 2023');
// $_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, 50, 51, 52, 53, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 90, 91, 92, 93];
// $_gelb = [8, 19, 29];
$_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];
$row = '1';
$coll = 'A';
foreach ($_headers as $key => $value) {
$cell = $coll.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $value);
if (\in_array($key, $_rot)) {
$spreadsheet->getActiveSheet()->getStyle($cell)->getFont()->getColor()->setARGB('ffffff');
$spreadsheet->getActiveSheet()->getStyle($cell)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('ff0000');
} elseif (\in_array($key, $_gelb)) {
$spreadsheet->getActiveSheet()->getStyle($cell)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('ffff00');
}
$spreadsheet->getActiveSheet()
->getStyle($cell)
->getBorders()
->getBottom()
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);
++$coll;
}
$_objekte_all = ObjekteExcel::select($projektid);
// print_r($_objekte_all);
// exit;
$row = 2;
foreach ($_objekte_all as $key => $value) {
$tt_raume_basis_id = $value['id'];
$cell = 'B'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $value['topNr']);
if (0 == $value['nodspl']) {
$cell = 'C'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $value['GNO']);
$cell = 'D'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $value['qmM1']);
// M2
$_methode_2 = DbFunction::selectJoin(
'tx_gutachten_raume_all',
['[>]tx_gutachten_raume_generell' => 'tt_raumart_id'],
[
'tx_gutachten_raume_all.uid',
'tx_gutachten_raume_all.geschoss',
'tx_gutachten_raume_all.raum',
'tx_gutachten_raume_all.factor',
'tx_gutachten_raume_all.qm',
'tx_gutachten_raume_all.NW',
'tx_gutachten_raume_all.NWungerundet',
'tx_gutachten_raume_all.NWm2',
'tx_gutachten_raume_all.uid',
'tx_gutachten_raume_all.timestamp',
'tx_gutachten_raume_generell.zunutzwert',
],
[
'AND' => [
'tx_gutachten_raume_all.tt_raumart_id' => [2, 8],
'tx_gutachten_raume_all.tt_raume_basis_id' => $tt_raume_basis_id,
'tx_gutachten_raume_all.pid' => $projektid,
'tx_gutachten_raume_generell.pid' => $projektid,
],
'ORDER' => 'tx_gutachten_raume_all.raum',
]
);
$zunutzwert = 0;
foreach ($_methode_2 as $k => $v) {
//if($b['tt_raumart_id']==2) //M2
//{
// $summeM2_factor += $b['NWm2'];
//}
//else //M2b
//{
// $summeM2_ohne_factor += $b['NWm2'];
//}
if (1 == $v['zunutzwert']) {
$zunutzwert += $v['qm'];
}
}
if ($zunutzwert > 0) {
$cell = 'E'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $zunutzwert);
}
$cell = 'F'.$row;
$gesamt = $value['qmM1'] + $zunutzwert;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $gesamt);
} else {
$cell = 'I'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $value['GNO']);
// STELLPLATZ qm
// Methode 5
$_m5 = DbFunction::select('tx_gutachten_raume_all', ['qm','raum'], ['AND' => ['tt_raume_basis_id' => $tt_raume_basis_id, 'tt_raumart_id' => 5]]);
$_qm = 0;
$raum = '';
foreach ($_m5 as $k => $m5) {
$_qm += (float) $m5['qm'];
$raum = (string) $m5['raum'];
}
// echo "\n" . $raum;
$cell = 'L'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, number_format($_qm, 2, ',', ''));
$cell = 'AT'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, "SALAM " . $raum);
}
// Parifizierer
$cell = 'R'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $_projekt[0]['gutachter']);
// LAGE
$_lage = Select::raume_all($projektid, $tt_raume_basis_id, 1);
$cell = 'AQ'.$row;
$lage = $_lage[0]['geschoss'] ?? '';
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $lage);
$cell = 'AR'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $value['orientierung']);
// WOHNUNG
if (0 == $value['nodspl']) {
// BESCHREIBUNG
$_beschreibung = Select::raume_all($projektid, $tt_raume_basis_id, [1, 2, 8]);
if (\count($_beschreibung) > 0) {
$_tmp = [];
// print_r($_beschreibung);
foreach ($_beschreibung as $key => $value) {
if (!\in_array($value['raum'], ['Loggia', 'Loggia 1', 'Loggia 2'])) {
$_tmp[] = $value['raum'];
}
}
$beschreibung = implode(', ', $_tmp);
$cell = 'AT'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $beschreibung);
}
// M2
if (\count($_methode_2) > 0) {
$_tmp = [];
foreach ($_methode_2 as $key => $value) {
if (\in_array($value['raum'], ['Loggia', 'Loggia 1', 'Loggia 2'])) {
$_tmp[] = $value['raum'].': '.number_format($value['qm'], 2, ',', '').' m²';
}
}
$beschreibung = implode(', ', $_tmp);
$cell = 'AU'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $beschreibung);
}
// M3
$_m3 = Select::raume_all($projektid, $tt_raume_basis_id, [3, 7]);
if (\count($_m3) > 0) {
$_tmp = [];
foreach ($_m3 as $key => $value) {
$_tmp[] = $value['raum'].' '.number_format($value['qm'], 2, ',', '').' m²';
}
$m3 = implode(', ', $_tmp);
$cell = 'AV'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $m3);
}
// M4
$_m4 = Select::raume_all($projektid, $tt_raume_basis_id, 4);
if (\count($_m4) > 0) {
$_tmp = [];
foreach ($_m4 as $key => $value) {
$_tmp[] = $value['raum'].' '.number_format($value['qm'], 2, ',', '').' m²';
}
$m4 = implode(', ', $_tmp);
$cell = 'AW'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $m4);
}
} else {
// Methode 5a & Methode 5b
// $_m56 = Select::raume_all($projektid, $tt_raume_basis_id, [5, 6, 9]);
$_m56 = DbFunction::select('tx_gutachten_raume_all', ['qm','raum'], ['AND' => ['tt_raume_basis_id' => $tt_raume_basis_id, 'tt_raumart_id' => [5, 6, 9] ],'ORDER' => ['tt_raumart_id' => 'ASC']]);
if (\count($_m56) > 0) {
$tmp1 = $_m56[0]['raum'];
$cell = 'AT'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $tmp1);
if(isset($_m56[1])){
$tmp2 = $_m56[1]['raum'] . ' ' . number_format($_m56[1]['qm'], 2, ',', '').' m²';
$cell = 'AV'.$row;
$spreadsheet->setActiveSheetIndex(0)->setCellValue($cell, $tmp2);
}
}
}
++$row;
}
// exit;
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$spreadsheet->setActiveSheetIndex(0);
// Rename worksheet
$spreadsheet->getActiveSheet()->setTitle('Daten für den Kaufvertrag');
// Redirect output to a client’s web browser (Xls)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$projektname.'.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header('Pragma: public'); // HTTP/1.0
// Xls
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
exit;
}
}