wip Nutzwerte pdf

This commit is contained in:
salam committed 2025-10-23 12:07:56 +02:00
1 parent 4ad27d8c19
commit 2296b708eb
31 files changed
+528 -1656

No files matched your search

@@ -11,13 +11,22 @@ class CreateOrientierungZuAbschlaege
{
OrientierungZuAbschlaege::where('projekte_id', $record->id)->delete();
$raeumealles = Raeumealle::select('top_nummer')->where('projekte_id', $record->id)->groupBy('top_nummer')->get();
$raeumealles = Raeumealle::select('top_nummer', 'geschoss')->where('projekte_id', $record->id)->get();
$arr = [];
foreach ($raeumealles as $raeumealle) {
OrientierungZuAbschlaege::firstOrCreate([
'projekte_id' => $record->id,
'top_nummer' => $raeumealle->top_nummer,
]);
if (! in_array($raeumealle->top_nummer, $arr)) {
$orientierung = new OrientierungZuAbschlaege;
$orientierung->projekte_id = $record->id;
$orientierung->top_nummer = $raeumealle->top_nummer;
$orientierung->geschoss = $raeumealle->geschoss ?? '';
$orientierung->save();
Raeumealle::where('projekte_id', $record->id)->where('top_nummer', $raeumealle->top_nummer)->update(['orientierung_zu_abschlaege_id' => $orientierung->id]);
$arr[] = $raeumealle->top_nummer;
}
}
}
}
@@ -34,6 +34,7 @@ class CreateProjektInhaltsverzeichnis
'sort' => $inhalt->sort,
'ordnungszahl' => $inhalt->ordnungszahl,
'name' => $inhalt->name,
'name2' => $inhalt->name2,
'ueberschrift_anzeigen' => $inhalt->ueberschrift_anzeigen,
'tabellen_id' => $inhalt->tabellen_id,
'textblock_id' => $inhalt->textblock_id,
+8 -8
View File
@@ -10,10 +10,10 @@ use Illuminate\Support\Facades\Storage;
class Gutachten
{
public function download($projekts_id, $mode)
public function download($projekte_id, $mode)
{
if ($mode == 'new') {
Projekte::where('id', $projekts_id)->update(['pdf_gutachten_name' => '', 'pdf_gutachten_status' => '0']);
Projekte::where('id', $projekte_id)->update(['pdf_gutachten_name' => '', 'pdf_gutachten_status' => '0']);
}
$headers = [
@@ -23,9 +23,9 @@ class Gutachten
'Cache-Control: cache, must-revalidate',
];
$projekt = Projekte::where('id', $projekts_id)->first()->toArray();
$projekt = Projekte::where('id', $projekte_id)->first()->toArray();
$filepath = Storage::disk('public')->path("/download/$projekts_id/");
$filepath = Storage::disk('public')->path("/download/$projekte_id/");
$filename = 'Gutachten '.preg_replace("'[^0-9a-zA-Z]'", '', $projekt['interner_name']).'.pdf';
@@ -34,9 +34,9 @@ class Gutachten
}
$file = $filepath.$filename;
MakeGutachten::generate($file, $projekts_id);
MakeGutachten::generate($file, $projekte_id);
return Response::download($file, $projekt['offizieller_name'], $headers);
return Response::download($file, 'Gutachten '.$projekt['offizieller_name'], $headers);
// if ($projekt['pdf_standardtexte_ok'] == 0) {
@@ -47,9 +47,9 @@ class Gutachten
// }
// $file = $filepath.$filename;
// MakeGutachten::generate($file, $projekts_id);
// MakeGutachten::generate($file, $projekte_id);
// Projekt::where('id', $projekts_id)->update(['pdf_standardtexte' => $filename, 'pdf_standardtexte_ok' => 1]);
// Projekt::where('id', $projekte_id)->update(['pdf_standardtexte' => $filename, 'pdf_standardtexte_ok' => 1]);
// return Response::download($file, $projekt['name'], $headers);
// } else {
+38 -27
View File
@@ -2,19 +2,19 @@
namespace App\Actions\Download;
use App\Actions\Generate\GenerateNutzwerte;
use App\Models\Projekt;
use App\Actions\Generate\MakeNutzwerte;
use App\Models\Projekte;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
class Nutzwerte
{
public function download($projekts_id, $mode)
public function download($projekte_id, $mode)
{
if ($mode == 'new') {
Projekt::where('id', $projekts_id)->update(['pdf_nutzwerte_name' => '', 'pdf_nutzwerte_status' => '0']);
Projekte::where('id', $projekte_id)->update(['pdf_nutzwerte_name' => '', 'pdf_nutzwerte_status' => '0']);
}
$headers = [
@@ -24,32 +24,43 @@ class Nutzwerte
'Cache-Control: cache, must-revalidate',
];
$projekt = Projekte::where('id', $projekts_id)->first()->toArray();
$projekt = Projekte::where('id', $projekte_id)->first()->toArray();
$filepath = Storage::disk('public')->path("/download/$projekts_id/nutzwerte/");
$filepath = Storage::disk('public')->path("/download/$projekte_id/");
if ($projekt['pdf_nutzwerte_status'] == 0) {
$filename = 'Gutachten '.preg_replace("'[^0-9a-zA-Z]'", '', $projekt['interner_name']).'.pdf';
$filename = preg_replace("'[^0-9a-zA-Z]'", '', $projekt['intname']).'.pdf';
if (! File::isDirectory($filepath)) {
File::makeDirectory($filepath, 0777, true, true);
}
$file = $filepath.$filename;
GenerateNutzwerte::generate($file, $projekts_id);
Projekt::where('id', $projekts_id)->update(['pdf_nutzwerte' => $filename, 'pdf_nutzwerte_ok' => '1']);
return Response::download($file, $projekt['name'], $headers);
} else {
$filename = $projekt['pdf_nutzwerte_name'];
$file = $filepath.$filename;
return Response::download($file, $projekt['name'], $headers);
if (! File::isDirectory($filepath)) {
File::makeDirectory($filepath, 0777, true, true);
}
$file = $filepath.$filename;
MakeNutzwerte::generate($file, $projekte_id);
return Response::download($file, 'Nutzwert '.$projekt['offizieller_name'], $headers);
// if ($projekt['pdf_nutzwerte_status'] == 0) {
// $filename = preg_replace("'[^0-9a-zA-Z]'", '', $projekt['intname']).'.pdf';
// if (! File::isDirectory($filepath)) {
// File::makeDirectory($filepath, 0777, true, true);
// }
// $file = $filepath.$filename;
// GenerateNutzwerte::generate($file, $projekte_id);
// Projekte::where('id', $projekte_id)->update(['pdf_nutzwerte' => $filename, 'pdf_nutzwerte_ok' => '1']);
// return Response::download($file, $projekt['name'], $headers);
// } else {
// $filename = $projekt['pdf_nutzwerte_name'];
// $file = $filepath.$filename;
// return Response::download($file, $projekt['name'], $headers);
// }
}
}
@@ -2,19 +2,24 @@
namespace App\Actions\Generate\Gutachten;
use App\Actions\Generate\Utilities\Html;
use App\Models\Allgemeinflaechen;
use App\Utilities\Html;
class AllgemeinTabelle
{
public static function load($projekts_id)
public static function load($projekte_id)
{
$_allgemeine = Allgemeinflaechen::select('geschoss', 'raumart', 'qm')->where('projekts_id', $projekts_id)->get()->toArray();
$_allgemeine = Allgemeinflaechen::select('geschoss', 'raumart', 'flaeche')
->where('projekte_id', $projekte_id)
->orderBy('raumart')
->get()
->toArray();
$_data = array_chunk($_allgemeine, 2);
$html = '<table class="table-striped m10">';
$html = '<table class="table-striped">';
$html .= '<tr>';
$html .= '<thead>';
$html .= Html::td('Geschoß', 'head bl bt wp10');
$html .= Html::td('Typ', 'head bl bt wp25');
$html .= Html::td('Fläche', 'head bl bt br wp10');
@@ -22,6 +27,7 @@ class AllgemeinTabelle
$html .= Html::td('Geschoß', 'head bl bt wp10');
$html .= Html::td('Typ', 'head bl bt wp25');
$html .= Html::td('Fläche', 'head bl bt br wp10');
$html .= '</thead>';
$html .= '</tr>';
foreach ($_data as $value) { //
@@ -29,13 +35,13 @@ class AllgemeinTabelle
if (isset($value[0])) {
$html .= Html::td($value[0]['geschoss'], 'bl bb');
$html .= Html::td($value[0]['raumart'], 'bl bb');
$html .= Html::td($value[0]['qm'], 'bl bb br');
$html .= Html::td($value[0]['flaeche'].' m&sup2;', 'bl bb br right');
$html .= '<td style="background:white"></td>';
}
if (isset($value[1])) {
$html .= Html::td($value[1]['geschoss'], 'bl bb');
$html .= Html::td($value[1]['raumart'], 'bl bb');
$html .= Html::td($value[1]['qm'], 'bl bb br');
$html .= Html::td($value[1]['flaeche'].' m&sup2;', 'bl bb br right');
}
$html .= '</tr>';
}
+2 -2
View File
@@ -12,8 +12,8 @@ class Inhalt
{
$html = '<div class="header">INHALTSVERZEICHNIS</div>';
$html .= '<table class="inhalt">';
$inhaltesverzeichnis = ProjektInhaltsverzeichnis::where('projekte_id', $projekte_id)->orderBy('sort')->get();
foreach ($inhaltesverzeichnis as $inhalt) {
$inhalte = ProjektInhaltsverzeichnis::where('projekte_id', $projekte_id)->orderBy('sort')->get();
foreach ($inhalte as $inhalt) {
if ($inhalt->ueberschrift_anzeigen) {
$html .= '<tr>';
$html .= Html::td(Format::index($inhalt->ordnungszahl));
@@ -9,37 +9,30 @@ class Paragraph6Tabelle
{
public static function load($projekte_id)
{
// $data = DB::table('raumorientierung')
// ->join('raumalles', 'raumorientierung.id', '=', 'raumalles.raumorientierung_id')
// ->join('orientierungs', 'raumorientierung.orientierungs_id', '=', 'orientierungs.id')
// ->select('raumorientierung.top_nr', 'raumorientierung.type', 'raumalles.geschoss', 'orientierungs.name')
// ->where('raumorientierung.projekts_id', $projekts_id)
// ->whereIn('raumalles.methodes_id', [1, 5, 6, 9])
// ->groupBy('raumorientierung.id')
// ->orderBy('raumalles.methodes_id', 'ASC')
// ->orderBy('raumorientierung.top_nr', 'ASC')
// ->get();
$data = OrientierungZuAbschlaege::with('orientierung')->where('projekte_id', $projekte_id)->get();
$data = OrientierungZuAbschlaege::with('orientierung')
->where('projekte_id', $projekte_id)
->orderBy('nicht_in_orientierung')
->orderBy('top_nummer')
->get();
$html = '<table class="table-striped bl bt m20">';
$html = '<table class="table-striped bl bt">';
$html .= '<tr>';
$html .= '<thead>';
$html .= Html::td('Top', 'head center br bb');
$html .= Html::td('Geschoß', 'head center br bb');
$html .= Html::td('Orientierung', 'head center br bb');
$html .= Html::td('Typ', 'head center br bb');
$html .= '</thead>';
$html .= '</tr>';
foreach ($data as $value) {
// dd($value);
$objekt = Raeumealle::where('projekte_id', $projekte_id)->where('top_nummer', $value->top_nummer)->pluck('geschoss', 'type');
$html .= '<tr>';
$html .= Html::td($value->top_nummer, 'center br bb');
$html .= Html::td($value->geschoss, 'center br bb');
$html .= Html::td($value->orientierung->name, 'center br bb');
// $html .= Html::td($value->type, 'center br bb');
$html .= Html::td($value->orientierung->name ?? '', 'center br bb');
$html .= Html::td($value->type, 'center br bb');
$html .= '</tr>';
}
$html .= '</table>';
@@ -1,39 +0,0 @@
<?php
namespace App\Actions\Generate\Gutachten;
use App\Utilities\Html;
class Tabelle
{
public static function load($standardtext)
{
$standardtext = strip_tags($standardtext, '<br>');
$standardtext = str_replace('<br>', '§§', $standardtext);
$standardtext = str_replace('<br/>', '§§', $standardtext);
$standardtext = str_replace('<br />', '§§', $standardtext);
$arr = explode('§§', $standardtext);
$html = '<table class="table-striped bl bt m10">';
foreach ($arr as $value) {
$tmp = explode('|', $value);
$tmp[0] = $tmp[0] ?? '';
$tmp[1] = $tmp[1] ?? '';
$html .= '<tr>';
$html .= Html::td($tmp[0], 'br bb');
$html .= Html::td($tmp[1], 'br bb');
$html .= '</tr>';
}
$html .= '</table>';
return $html;
}
}
+5 -193
View File
@@ -7,13 +7,10 @@ use App\Actions\Generate\Gutachten\Deckblatt;
use App\Actions\Generate\Gutachten\Inhalt;
use App\Actions\Generate\Gutachten\Paragraph6Tabelle;
use App\Actions\Generate\Gutachten\Platzhalter;
use App\Actions\Generate\Gutachten\Standardtext;
use App\Actions\Generate\Gutachten\Tabelle;
use App\Actions\Generate\Gutachten\Ueberschrift;
use App\Actions\Generate\Utilities\Format;
use App\Models\Auftraggeber;
use App\Models\Gutachter;
use App\Models\Inhaltsverzeichnis;
use App\Models\Projekte;
use App\Models\ProjektInhaltsverzeichnis;
use App\Models\ProjektPlatzhalter;
@@ -37,6 +34,8 @@ class MakeGutachten
self::$auftraggeber = Auftraggeber::where('id', self::$projekt->auftraggeber_id)->first();
ob_start();
$mpdf = new Mpdf(
[
'debug' => true,
@@ -53,8 +52,6 @@ class MakeGutachten
$stylesheet = file_get_contents(__DIR__.'/../../../resources/css/pdf-download.css');
$mpdf->WriteHTML($stylesheet, HTMLParserMode::HEADER_CSS);
$mpdf->SetTitle('Nutzwertgutachen '.self::$projekt->offizieller_name);
$mpdf->SetTitle('Gutachten '.self::$projekt->offizieller_name);
$mpdf->SetCreator('nutzwerte.at');
$mpdf->SetAuthor(self::$gutachter->title.' '.self::$gutachter->gender.' '.self::$gutachter->name);
@@ -90,6 +87,9 @@ class MakeGutachten
case '3':
$html .= Paragraph6Tabelle::load($projekte_id);
break;
case '4':
$html .= AllgemeinTabelle::load($projekte_id);
break;
case '8':
$str = RichContentRenderer::make(MakeGutachten::$auftraggeber->referenz_formatting)->toHtml();
$html .= Format::fix_str($str);
@@ -105,194 +105,6 @@ class MakeGutachten
}
}
// $inhalte = Inhaltsverzeichnis::where('projekte_id', $projekte_id)->where('is_active', 1)->orderBy('pos')->get();
// if (count($inhalte) == 0) {
// exit;
// }
// foreach ($inhalte as $inhalt) {
// $standardtext = Standardtext::replace($inhalt['standardtext']);
// switch ($inhalt['kennung']) {
// case 'deckblatt':
// $html = Deckblatt::load($standardtext);
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'inhalt':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// }
// $html = Inhalt::load($standardtext);
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// break;
// case 'allgemeineangaben':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'auftraggeber':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= trim(self::self::$auftraggeber->adressenblock);
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'zweck':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= $standardtext;
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'ortsbesichtigung':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= $standardtext;
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'unterlagen':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= $standardtext;
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'befund':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'grundbuchstand':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= Tabelle::load($standardtext);
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'beschreibung':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= $standardtext;
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'paragraph_6_teil_1':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= $standardtext;
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'paragraph_6_tabelle':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// }
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html = Paragraph6Tabelle::load($projekte_id);
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'paragraph_6_teil_2':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= $standardtext;
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'allgemeinflaechen_nach_p6':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">ALLGEMEINFLÄCHEN</div>';
// $html .= AllgemeinTabelle::load($projekte_id);
// $html .= '<br><br><br><br><br><br><br>';
// $html .= '<table class="inhalt"><tr>';
// $html .= '<td>'.self::$projekt->erstellung.'</td>';
// $html .= '<td class="right">'.self::$gutachter->kennung.'</td>';
// $html .= '</tr></table>';
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'gutachten':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// }
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'allgemeine-grundsaetze':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= $standardtext;
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'allgemeine-bewertungen':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= $standardtext;
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'zubehoer':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['titel'].'</div>';
// $html .= $standardtext;
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// }
// }
ob_clean();
$mpdf->Output($filepath, 'F');
+97 -65
View File
@@ -2,6 +2,8 @@
namespace App\Actions\Generate;
use App\Actions\Generate\Gutachten\Platzhalter;
use App\Actions\Generate\Gutachten\Ueberschrift;
use App\Actions\Generate\Nutzwerte\Allgemeinflaechens;
use App\Actions\Generate\Nutzwerte\BerechnungM1M4;
use App\Actions\Generate\Nutzwerte\BerechnungM5;
@@ -11,8 +13,9 @@ use App\Actions\Generate\Nutzwerte\ZuUndAbschlaege;
use App\Actions\ProcessData\ProcessRaumorientierung;
use App\Models\Auftraggeber;
use App\Models\Gutachter;
use App\Models\Inhaltsverzeichnis;
use App\Models\Projekt;
use App\Models\Projekte;
use App\Models\ProjektInhaltsverzeichnis;
use App\Models\ProjektPlatzhalter;
use Mpdf\HTMLParserMode;
use Mpdf\Mpdf;
@@ -24,15 +27,17 @@ class MakeNutzwerte
public static $auftraggeber;
public static function generate($filepath, $projekts_id)
public static function generate($filepath, $projekte_id)
{
ProcessRaumorientierung::berechnen($projekts_id);
BerechnungNutzwerte::berechnen($projekts_id);
// ProcessRaumorientierung::berechnen($projekte_id);
// BerechnungNutzwerte::berechnen($projekte_id);
// PDF START
self::$projekt = Projekt::where('id', $projekts_id)->get()->first();
self::$gutachter = Gutachter::where('id', self::$projekt->gutachters_id)->get()->first();
self::$auftraggeber = Auftraggeber::where('id', self::$projekt->auftraggebers_id)->get()->first();
self::$projekt = Projekte::where('id', $projekte_id)->first();
self::$gutachter = Gutachter::where('id', self::$projekt->gutachter_id)->first();
self::$auftraggeber = Auftraggeber::where('id', self::$projekt->auftraggeber_id)->first();
ob_start();
@@ -51,74 +56,101 @@ class MakeNutzwerte
);
$stylesheet = file_get_contents(__DIR__.'/../../../resources/css/pdf-download.css');
$mpdf->WriteHTML($stylesheet, HTMLParserMode::HEADER_CSS);
$mpdf->SetTitle('Nutzwertgutachen '.self::$projekt->name);
$mpdf->SetCreator('www.nutzwertgutachen.at');
$mpdf->SetAuthor(self::$gutachter->adressenblock);
$mpdf->SetTitle('Nutzwerte '.self::$projekt->offizieller_name);
$mpdf->SetCreator('nutzwerte.at');
$mpdf->SetAuthor(self::$gutachter->title.' '.self::$gutachter->gender.' '.self::$gutachter->name);
$inhalte = Inhaltsverzeichnis::where('projekts_id', $projekts_id)->where('is_active', 1)->orderBy('pos')->get();
if (count($inhalte) == 0) {
exit;
}
foreach ($inhalte as $inhalt) {
$inhaltesverzeichnis = ProjektInhaltsverzeichnis::where('projekte_id', $projekte_id)->where('part', 2)->orderBy('sort')->get();
switch ($inhalt['kennung']) {
$platzhalter = ProjektPlatzhalter::where('projekte_id', $projekte_id)->pluck('platzhaltertext', 'platzhalter')->toArray();
case 'tabelle_zu_abschlaege':
// Zu und Abschläge
if ($inhalt['neue_seite']) {
$mpdf->AddPage('', '', $inhalt->seite);
$mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
}
$html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
$html .= '<table class="table-striped text-75">';
$html .= ZuUndAbschlaege::load($projekts_id);
$html .= '</table>';
$mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
break;
foreach ($inhaltesverzeichnis as $inhalt) {
case 'nutzwertberechnung':
if ($inhalt['neue_seite']) {
$mpdf->AddPage();
$mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
}
if ($inhalt->neue_seite) {
$mpdf->AddPage();
}
$html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
$html .= BerechnungM1M4::load($projekts_id);
$mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
$html = Ueberschrift::create($inhalt);
$html = BerechnungM5::load($projekts_id);
if ($html) {
$mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
}
break;
if ($inhalt->textblock) {
$html .= Platzhalter::replace($platzhalter, $inhalt->textblock);
}
case 'zusammenstellung':
if ($inhalt['neue_seite']) {
$mpdf->AddPage();
$mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
}
$html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
$html .= Zusammenstellung::load($projekts_id);
$html .= '<br><br><br><br><br><br><br>';
$html .= '<table class="inhalt"><tr>';
$html .= '<td>'.self::$projekt->erstellung.'</td>';
$html .= '<td class="right">'.self::$gutachter->kennung.'</td>';
$html .= '</tr></table>';
$mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
break;
case 'allgemeinflaechen':
if ($inhalt['neue_seite']) {
$mpdf->AddPage();
$mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
}
$html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
$html .= Allgemeinflaechens::load($projekts_id);
$mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
switch ($inhalt->tabellen_id) {
case '5':
$html .= ZuUndAbschlaege::load($projekte_id);
break;
}
}
if ($inhalt->seitenzahl_anzeige == 1) {
$mpdf->SetHTMLFooter('<div class="center">Seite {PAGENO}<br><br></div>');
}
if ($html) {
$mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
}
// foreach ($inhalte as $inhalt) {
// switch ($inhalt['kennung']) {
// case 'tabelle_zu_abschlaege':
// // Zu und Abschläge
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage('', '', $inhalt->seite);
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= '<table class="table-striped text-75">';
// $html .= ZuUndAbschlaege::load($projekte_id);
// $html .= '</table>';
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'nutzwertberechnung':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= BerechnungM1M4::load($projekte_id);
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// $html = BerechnungM5::load($projekte_id);
// if ($html) {
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// }
// break;
// case 'zusammenstellung':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= Zusammenstellung::load($projekte_id);
// $html .= '<br><br><br><br><br><br><br>';
// $html .= '<table class="inhalt"><tr>';
// $html .= '<td>'.self::$projekt->erstellung.'</td>';
// $html .= '<td class="right">'.self::$gutachter->kennung.'</td>';
// $html .= '</tr></table>';
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// case 'allgemeinflaechen':
// if ($inhalt['neue_seite']) {
// $mpdf->AddPage();
// $mpdf->SetHTMLFooter('<div class="size09 center">Seite {PAGENO}<br><br></div>');
// }
// $html = '<div class="header">'.$inhalt['index'].' - '.$inhalt['titel'].'</div>';
// $html .= Allgemeinflaechens::load($projekte_id);
// $mpdf->WriteHTML($html, HTMLParserMode::HTML_BODY);
// break;
// }
// }
ob_clean();
$mpdf->Output($filepath, 'F');
@@ -3,6 +3,7 @@
namespace App\Actions\Generate\Nutzwerte;
use App\Models\Merkmale;
use App\Models\OrientierungZuAbschlaege;
use App\Models\Raumalles;
use App\Models\Raumorientierung;
use App\Utilities\Format;
@@ -10,14 +11,23 @@ use App\Utilities\Html;
class ZuUndAbschlaege
{
public static function load(int $projekts_id)
public static function load(int $projekte_id)
{
Raumorientierung::where('projekts_id', $projekts_id)->where('top_nr', '')->delete();
Raumorientierung::where('projekts_id', $projekts_id)->where('top_nr', 'like', '%---%')->delete();
// 3.21 Zu und Abschläge
$orientierungen = OrientierungZuAbschlaege::select()
->with('orientierung')
->where('projekte_id', $projekte_id)
->where('nicht_in_orientierung', 0)
->get();
foreach ($orientierungen as $orientierung) {
dd($orientierung);
}
// $total = Invoice::where('status', 'Completed')->sum('amount');
$header_row = ['Top', 'Geschoß', 'Typ', 'Nutzfläche', 'Loggia / sonst. Zusatzflächen', 'Gesamtnutzfläche'];
$merkmale = Merkmale::merkmale($projekts_id);
$merkmale = Merkmale::merkmale($projekte_id);
$markmale_col = [];
foreach ($merkmale as $value) {
$markmale_col[] = $value['col'];
@@ -27,14 +37,14 @@ class ZuUndAbschlaege
$header_row[] = 'Wohnungsbewertung';
$html = Html::table_header_90($header_row);
$res = Raumalles::select('raumorientierung_id', 'geschoss')->where('projekts_id', $projekts_id)->where('methodes_id', 1)->get();
$res = Raumalles::select('raumorientierung_id', 'geschoss')->where('projekte_id', $projekte_id)->where('methodes_id', 1)->get();
$geschoss = [];
foreach ($res as $value) {
$id = $value->raumorientierung_id;
$geschoss[$id] = $value['geschoss'];
}
$res = Raumorientierung::select()->where('projekts_id', $projekts_id)->where('nicht_in_orientierung', 0)->whereNotNull('top_nr')->orderBy('top_nr')->get();
$res = Raumorientierung::select()->where('projekte_id', $projekte_id)->where('nicht_in_orientierung', 0)->whereNotNull('top_nr')->orderBy('top_nr')->get();
foreach ($res as $value) {
$id = $value->id;
$html .= '<tr>';
+13 -2
View File
@@ -197,13 +197,24 @@ class GutachtenValidation
}
$res = OrientierungZuAbschlaege::where('projekte_id', $record->id)->where('nicht_in_orientierung', false)->get();
foreach ($res as $value) {
if (! $value->orientierung_id) {
if (! $value->orientierung_id && ! $value->nicht_in_orientierung) {
Notification::make()
->title('Orientierung Zu und Abschläge')
->info()
->icon('heroicon-o-exclamation-triangle')
->duration(10000)
->body('Für den Raum <b>'.$value->raumart.'</b> mit der Top Nummer <b>'.$value->top_nummer.'</b> fehlt die <u>Orientierung</u>.')
->body('Bei der Top Nummer <b>'.$value->top_nummer.'</b> fehlt die <u>Orientierung</u>.')
->send();
return false;
}
if (! $value->orientierung_id && ! $value->type) {
Notification::make()
->title('Orientierung Zu und Abschläge')
->info()
->icon('heroicon-o-exclamation-triangle')
->duration(10000)
->body('Bei der Top Nummer <b>'.$value->top_nummer.'</b> fehlt der <u>Type</u>.')
->send();
return false;
@@ -98,7 +98,7 @@ class EditProjekte extends EditRecord
*/
Action::make('nutzwerte')
->hidden(fn ($record): bool => (! $record->bezahlt_am || ! $record->pdf_nutzwerte_status) ? true : false)
->color('primary')
->color('success')
->label('Nutzwerte')
->icon('icon-pdf')
->url(fn ($record) => route('nutzwerte.download', ['record' => $record, 'mode' => 'file']))
@@ -59,6 +59,9 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
'style' => 'position: sticky; left: 0; z-index: 1;',
'class' => 'bg-gray-50 dark:bg-gray-900',
]),
TextInputColumn::make('geschoss')
->width('1rem')
->toggleable(),
CheckboxColumn::make('nicht_in_orientierung')
->label('NiO')
->toggleable()
@@ -76,6 +79,7 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
->label('Orientierung')
->selectablePlaceholder(true)
->options(Orientierung::pluck('name', 'id'))
->selectablePlaceholder(false)
->disableOptionWhen(fn (string $value): bool => in_array($value, [2, 11, 24, 33, 36]))
->preloadOptions()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
@@ -230,8 +234,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
->requiresConfirmation()
->modalHeading('Orientierung Zu/Abschläge erstellen')
->modalDescription('Alle bestehenden Daten in dieser Tabelle werden vorher gelöscht.')
->modalSubmitActionLabel('Erstellen')
->label('Erstellen')
->modalSubmitActionLabel('Generieren')
->label('Generieren')
->tooltip('Daten werden aus "Räume Alle" gefiltert.')
->icon('heroicon-o-cog-8-tooth')
->after(function (Component $livewire) {
@@ -208,11 +208,20 @@ class ProjektInhaltsverzeichnisRelationManager extends RelationManager
{
return $table
->recordTitleAttribute('text')
// ->recordClasses(fn ($record) => $record->part == 'gutachten' ? 'border-l border-primary-500' : 'border-l border-success-500')
->columns([
TextColumn::make('ordnungszahl')
->alignCenter()
->width('2rem')
->label('Index')
->getStateUsing(fn ($record): string => $record->ordnungszahl == '0' ? '' : number_format($record->ordnungszahl, 2)),
->getStateUsing(fn ($record): string => $record->ordnungszahl == '0' ? '' : number_format($record->ordnungszahl, 2))
->extraCellAttributes(function ($record) {
if ($record->part == 1) {
return ['class' => 'bg-primary-500/10'];
} else {
return ['class' => 'bg-success-500/10'];
}
}),
IconColumn::make('neue_seite')
->label('Seite')
->tooltip('Start einer neue Seite')
@@ -229,6 +238,7 @@ class ProjektInhaltsverzeichnisRelationManager extends RelationManager
}),
TextColumn::make('name')
->wrap()
->searchable()
->weight(fn ($record): FontWeight => match ($record->ueberschrift_anzeigen) {
1 => FontWeight::SemiBold,
default => FontWeight::Thin,
@@ -258,9 +268,6 @@ class ProjektInhaltsverzeichnisRelationManager extends RelationManager
])
->defaultSort('sort', direction: 'asc')
->reorderable('sort')
->filters([
//
])
->headerActions([
Action::make('generate')
->action(fn (CreateProjektInhaltsverzeichnis $createInhaltsverzeichnis) => $createInhaltsverzeichnis->create($this->ownerRecord))
@@ -71,8 +71,8 @@ class ProjektMethodesRelationManager extends RelationManager
->requiresConfirmation()
->modalHeading('Raum Methoden erstellen')
->modalDescription('Alle bestehenden Daten in dieser Tabelle werden vorher gelöscht.')
->modalSubmitActionLabel('Erstellen')
->label('Erstellen')
->modalSubmitActionLabel('Generieren')
->label('Generieren')
->tooltip('Daten werden aus "Räume Alle" Tabelle gefiltert.')
->icon('heroicon-o-cog-8-tooth')
->after(function (Component $livewire) {
@@ -82,46 +82,46 @@ class ProjektMethodesRelationManager extends RelationManager
->toolbarActions([
BulkActionGroup::make([
BulkAction::make('faktor')
->color('primary')
->label('Faktor zuweisen')
->schema([
TextInput::make('faktor')
->prefixIcon('phosphor-function')
->numeric()
->required(),
])
->icon('phosphor-function')
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
ProjektMethode::where('id', '=', $record->id)
->update(
['faktor' => $data['faktor']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshMethods');
}),
->color('primary')
->label('Faktor zuweisen')
->schema([
TextInput::make('faktor')
->prefixIcon('phosphor-function')
->numeric()
->required(),
])
->icon('phosphor-function')
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
ProjektMethode::where('id', '=', $record->id)
->update(
['faktor' => $data['faktor']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshMethods');
}),
BulkAction::make('methode')
->color('primary')
->label('Methode zuweisen')
->schema([
Select::make('methode_id')
->label('Methode')
->prefixIcon('phosphor-calculator')
->options(Methode::pluck('name', 'id'))
->required(),
])
->icon('phosphor-calculator')
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
ProjektMethode::where('id', '=', $record->id)
->update(
['methode_id' => $data['methode_id']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshMethods');
}),
->color('primary')
->label('Methode zuweisen')
->schema([
Select::make('methode_id')
->label('Methode')
->prefixIcon('phosphor-calculator')
->options(Methode::pluck('name', 'id'))
->required(),
])
->icon('phosphor-calculator')
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
ProjektMethode::where('id', '=', $record->id)
->update(
['methode_id' => $data['methode_id']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshMethods');
}),
]),
]);
}
+1
View File
@@ -8,6 +8,7 @@ class Raeumealle extends Model
{
protected $fillable = [
'projekte_id',
'orientierung_zu_abschlaege_id',
'methode_id',
'top_nummer',
'geschoss',