This commit is contained in:
salam committed 2025-11-14 12:33:19 +01:00
1 parent a20893d527
commit 4b79874100
31 files changed
+549 -1535

No files matched your search

@@ -2,21 +2,28 @@
namespace App\Actions\Generate\Tabellen;
use App\Actions\Generate\Tabellen\Nutzwerte\Projekt;
use App\Actions\Generate\Pdf;
use App\Actions\Generate\Utilities\Html;
use App\Models\ProjektMethode;
use App\Models\ProjektObjekte;
use App\Models\ProjektObjekteImDetail;
class Nutzwertberechnung
{
public static $methoden = [];
public static $projekte_id = 0;
public static function load($projekte_id)
{
$objekte = Projekt::load($projekte_id);
self::$projekte_id = $projekte_id;
// dd($objekte);
$objekte = self::laod_project(false);
$html = '';
foreach ($objekte as $methoden) {
$html .= Html::table_header(['Top Nr.', 'Geschoß', 'Orientierung', 'Typ', '', 'Fläche', '', 'Faktor', '', '', 'Nutzwert']);
$html .= Html::table_header(['Top Nummer', 'Geschoß', 'Orientierung', 'Typ', '', 'Fläche', '', 'Faktor', '', '', 'Nutzwert'], 'page-break-inside:avoid');
$summe_nutzwert = 0;
/**
@@ -26,7 +33,7 @@ class Nutzwertberechnung
$flaeche = 0;
foreach ($methoden[1] as $komponente) {
$html .= '<tr>';
$html .= Html::td($komponente['top_nummer'], 'bl bb');
$html .= Html::td($komponente['top_nummer'], 'bold bl bb');
$html .= Html::td($komponente['geschoss'], 'bl bb');
$html .= Html::td($komponente['orientierung'], 'bl bb');
$html .= Html::td($komponente['type'], 'bl bb');
@@ -46,8 +53,8 @@ class Nutzwertberechnung
$html .= Html::td(number_format($faktor, 3, ',', '.'), 'center bl bb');
$html .= Html::td('=', 'center bl bb');
$html .= Html::td(number_format($flaeche * $faktor, 3, ',', '.'), 'right bl bb');
$summe_nutzwert = round($flaeche * $faktor);
$html .= Html::td($summe_nutzwert, 'center bl bb br');
$summe_nutzwert = $flaeche * $faktor;
$html .= Html::td(round($summe_nutzwert), 'center bl bb br');
$html .= '</tr>';
}
@@ -68,12 +75,19 @@ class Nutzwertberechnung
$html .= Html::td('=', 'center bl bb');
$nutzwert = $komponente['flaeche'] * $komponente['faktor'];
$html .= Html::td(number_format($nutzwert, 3, ',', '.'), 'right bl bb');
$nutzwert = round($nutzwert);
$html .= Html::td($nutzwert, 'center bl bb br');
$summe_nutzwert += $nutzwert;
$html .= Html::td('', 'center bl bb br');
$html .= '</tr>';
}
$html .= '<tr>';
$html .= Html::td('', 'bl bb', 9);
$html .= Html::td(number_format($summe_nutzwert + $nutzwert, 3, ',', '.'), 'right bl bb');
$html .= Html::td(round($summe_nutzwert + $nutzwert), 'center bl bb');
$html .= '</tr>';
$summe_nutzwert += $nutzwert;
}
$summe_nutzwert = round($summe_nutzwert);
/**
* Terasse, Balkon
@@ -92,10 +106,11 @@ class Nutzwertberechnung
$html .= Html::td('=', 'center bl bb');
$nutzwert = $komponente['flaeche'] * $komponente['faktor'];
$html .= Html::td(number_format($nutzwert, 3, ',', '.'), 'right bl bb');
$nutzwert = round($nutzwert);
$nutzwert = round($nutzwert) < 1 ? 1 : round($nutzwert);
$html .= Html::td($nutzwert, 'center bl bb br');
$summe_nutzwert += $nutzwert;
$html .= '</tr>';
$summe_nutzwert += $nutzwert;
}
}
@@ -116,18 +131,113 @@ class Nutzwertberechnung
$html .= Html::td('=', 'center bl bb');
$nutzwert = $komponente['flaeche'] * $komponente['faktor'];
$html .= Html::td(number_format($nutzwert, 3, ',', '.'), 'right bl bb');
$nutzwert = round($nutzwert);
$nutzwert = round($nutzwert) < 1 ? 1 : round($nutzwert);
$html .= Html::td($nutzwert, 'center bl bb br');
$summe_nutzwert += $nutzwert;
$html .= '</tr>';
$summe_nutzwert += $nutzwert;
}
}
$html .= Html::table_footer($summe_nutzwert);
$html .= '</table>';
Pdf::$zusammenstellung[$komponente['id']] = $summe_nutzwert;
}
$objekte = self::laod_project(true);
foreach ($objekte as $methoden) {
/**
* Stellplätze
*/
$html .= Html::table_header(['Top Nummer', 'Geschoß', '', 'Fläche', '', 'Faktor', '', '', 'Nutzwert'], 'page-break-inside:avoid');
$nutzwert = 0;
if (isset($methoden[5])) {
foreach ($methoden[5] as $komponente) {
$html .= '<tr>';
$html .= Html::td($komponente['top_nummer'], 'bl bb');
$html .= Html::td($komponente['geschoss'], 'bl bb');
$html .= Html::td($komponente['raumart'], 'bl bb');
$html .= Html::td(number_format($komponente['flaeche'], 2, ',', '.').' m&sup2;', 'right bl bb');
$html .= Html::td('x', 'center bl bb');
$html .= Html::td(number_format($komponente['faktor'], 3), 'center bl bb');
$html .= Html::td('=', 'center bl bb');
$nutzwert = $komponente['flaeche'] * $komponente['faktor'];
$html .= Html::td(number_format($nutzwert, 3, ',', '.'), 'right bl bb');
$nutzwert = round($nutzwert) < 1 ? 1 : round($nutzwert);
$html .= Html::td($nutzwert, 'center bl bb br');
$html .= '</tr>';
}
}
$html .= Html::table_footer($nutzwert, 8);
$html .= '</table>';
Pdf::$zusammenstellung[$komponente['id']] = $nutzwert;
}
return $html;
}
public static function laod_project($nicht_in_orientierung)
{
$objekte = ProjektObjekte::with('orientierung')
->where('projekte_id', self::$projekte_id)
->where('nicht_in_orientierung', $nicht_in_orientierung)
->orderBy('top_nummer')
->get();
$tmp = [];
foreach ($objekte as $objekt) {
$elemente = ProjektObjekteImDetail::where('projekt_objekte_id', $objekt->id)->get();
foreach ($elemente as $key => $element) {
$methode = self::laod_methode($element['raumart']);
$methode_id = $methode['methode_id'];
$methode_faktor = $methode['faktor'];
$orientierung = $objekt['orientierung']['name'] ?? '';
if ($key > 0 && $methode_id == 1) {
$orientierung = '';
}
$geschoss = $element['geschoss'] ?? '';
if ($key > 0 && $methode_id <= 1) {
$geschoss = '';
}
$t = [];
$t['id'] = $objekt->id;
$t['type'] = ! $key ? $objekt->type : '';
$t['geschoss'] = $geschoss;
$t['orientierung'] = $orientierung;
$t['raumart'] = $element['raumart'];
$t['flaeche'] = $element['flaeche'];
$t['nutzwert'] = $element['nutzwert'];
$t['top_nummer'] = ! $key ? $objekt->top_nummer : '';
$t['objekt_nutzwert'] = $objekt->nutzwert;
$t['faktor'] = $methode_faktor;
$tmp[$objekt->top_nummer][$methode_id][] = $t;
}
}
return $tmp;
}
public static function laod_methode($raumart)
{
if (! count(self::$methoden)) {
self::$methoden = ProjektMethode::where('projekte_id', self::$projekte_id)->get();
}
foreach (self::$methoden as $methode) {
if ($methode->raumart == $raumart) {
return $methode;
}
}
dd('Model ProjektMethode "raumart" '.$raumart.' missing'.__FILE__);
}
}
@@ -1,48 +0,0 @@
<?php
namespace App\Actions\Generate\Tabellen\Nutzwerte;
use App\Models\ProjektMethode;
use App\Models\ProjektObjekte;
use App\Models\ProjektObjekteImDetail;
class Projekt
{
public static function load($projekte_id)
{
$methoden = ProjektMethode::where('projekte_id', $projekte_id)->pluck('methode_id', 'raumart')->toArray();
$objekte = ProjektObjekte::with('orientierung')
->where('projekte_id', $projekte_id)
->orderBy('nicht_in_orientierung')
->orderBy('top_nummer')
->get();
$tmp = [];
foreach ($objekte as $objekt) {
$elemente = ProjektObjekteImDetail::where('projekt_objekte_id', $objekt->id)->get();
foreach ($elemente as $key => $element) {
$methode_id = $methoden[$element['raumart']];
$t = [];
$t['type'] = $objekt->type ?? '';
$t['geschoss'] = $element['geschoss'];
$t['raumart'] = $element['raumart'];
$t['faktor'] = $element['faktor'];
$t['flaeche'] = $element['flaeche'];
$t['nutzwert'] = $element['nutzwert'];
$t['top_nummer'] = ! $key ? $objekt->top_nummer : '';
$t['objekt_nutzwert'] = $objekt->nutzwert;
$t['faktor_methode'] = $element['methode']['faktor'];
$t['orientierung'] = isset($objekt['orientierung']['name']) ? $objekt['orientierung']['name'] : '';
$tmp[$objekt->top_nummer][$methode_id][] = $t;
}
}
// dd($tmp);
return $tmp;
}
}
@@ -7,14 +7,12 @@ use App\Actions\Generate\Utilities\Html;
use App\Models\ProjektMerkmale;
use App\Models\ProjektMethode;
use App\Models\ProjektObjekte;
use App\Models\ProjektObjekteImDetail;
use DB;
class ZuUndAbschlaege
{
public static function load(int $projekte_id)
{
$objekte = ProjektObjekte::select()
->with('orientierung')
->where('projekte_id', $projekte_id)
@@ -43,18 +41,12 @@ class ZuUndAbschlaege
foreach ($objekte as $objekt) {
// $detail = ProjektObjekteImDetail::join('projekt_methodes', 'projekt_objekte_im_details.raumart', '=', 'projekt_methodes.name')
// ->where('projekt_methodes.projekte_id', $projekte_id)
// ->where('projekt_objekte_im_details.projekt_objekte_id', $objekt->id)
// ->get();
// dd($detail);
$detail = DB::table('projekt_objekte_im_details')
->join('projekt_methodes', 'projekt_objekte_im_details.raumart', '=', 'projekt_methodes.raumart')
->select(
'projekt_methodes.faktor',
'projekt_objekte_im_details.geschoss',
'projekt_objekte_im_details.raumart',
'projekt_objekte_im_details.faktor',
'projekt_objekte_im_details.flaeche',
'projekt_objekte_im_details.nutzwert',
)
@@ -71,7 +63,7 @@ class ZuUndAbschlaege
$html .= Html::td($objekt['top_nummer'], 'center bl br bb');
$html .= Html::td($geschoss, 'center br bb');
$html .= Html::td($objekt['type'], 'br bb');
// Nutzfläache
// Nutzfläche
$html .= Html::td(Format::dezimal($flaeche, 2).' m&sup2;', 'center br bb w30');
// Loggia
if ($has_loggien) {
@@ -2,10 +2,10 @@
namespace App\Actions\Generate\Tabellen;
use App\Actions\Generate\Pdf;
use App\Actions\Generate\Utilities\Format;
use App\Actions\Generate\Utilities\Html;
use App\Models\ProjektObjekte;
use App\Models\ProjektObjekteImDetail;
class Zusammenstellung
{
@@ -15,12 +15,13 @@ class Zusammenstellung
$summe_prozent = [];
$summe_nutzwert = [];
$html = Html::table_header(['Top', 'Geschoß', 'Orientierung', 'Typ', 'Nutzwert', 'x2 *', '%']);
$nutzwert_gesammt = array_sum(Pdf::$zusammenstellung);
$nutzwert_gesammt = ProjektObjekteImDetail::where('projekte_id', $projekte_id)->sum('nutzwert');
$html = Html::table_header(['Top', 'Geschoß', 'Orientierung', 'Typ', 'Nutzwert', 'x2 *', '%']);
$objekte = ProjektObjekte::select()
->with('orientierung')
->with('projektobjekteimdetail')
->where('projekte_id', $projekte_id)
->orderBy('nicht_in_orientierung', 'ASC')
->orderBy('top_nummer', 'ASC')
@@ -28,29 +29,23 @@ class Zusammenstellung
foreach ($objekte as $objekt) {
$objektimdetail = ProjektObjekteImDetail::where('projekt_objekte_id', $objekt->id)->get();
$nutzwert = $objektimdetail->sum('nutzwert');
$tmp = 0;
$str = '';
if ($nutzwert > 0) {
$str = $nutzwert * 2 .' / '.$nutzwert_gesammt * 2 .' tel Anteil =';
$tmp = ($nutzwert * 2) / ($nutzwert_gesammt * 2) * 100;
$prozent = Format::dezimal($tmp, 3).'%';
}
$summe_prozent[] = $tmp;
$summe_nutzwert[] = $nutzwert;
$html .= '<tr>';
$html .= Html::td($objekt->top_nummer, 'bl bb br');
$html .= Html::td($objektimdetail->first()->geschoss, 'center br bb');
$html .= Html::td($objekt->projektobjekteimdetail->first()->geschoss, 'center br bb');
$html .= Html::td($objekt->orientierung?->name, 'center br bb');
$html .= Html::td($objekt?->type, 'center br bb');
$nutzwert = Pdf::$zusammenstellung[$objekt->id];
$summe_nutzwert[] = $nutzwert;
$html .= Html::td(round($nutzwert), 'center bb br');
$str = $nutzwert * 2 .' / '.$nutzwert_gesammt * 2 .' tel Anteil =';
$html .= Html::td($str, 'center bb br');
$prozent = ($nutzwert * 2) / ($nutzwert_gesammt * 2) * 100;
$summe_prozent[] = $prozent;
$prozent = Format::dezimal($prozent, 3).'%';
$html .= Html::td($prozent ?? '', 'center bb br');
$html .= '</tr>';
}