289 lines
12 KiB
PHP
289 lines
12 KiB
PHP
<?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;
|
||
}
|
||
}
|