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

No files matched your search

+2
View File
@@ -2,6 +2,7 @@
namespace App\Actions\Create;
use App\Actions\Generate\Utilities\Filter;
use App\Models\Projekte;
use App\Models\ProjektInhaltsverzeichnis;
use App\Models\ProjektPlatzhalter;
@@ -19,6 +20,7 @@ class CreatePlatzhalter
}
$_platzhalter = array_unique($_platzhalter);
$_platzhalter = Filter::array_remove($_platzhalter, ['###INTERNER_NAME###', '###ORT###', '###DATUM###']);
ProjektPlatzhalter::where('projekte_id', $record->id)->update(['controll' => true]);
@@ -1,262 +0,0 @@
<?php
namespace App\Actions\Generate\Nutzwerte;
use App\Models\Orientierung;
use App\Models\Raumalles;
use App\Models\Raumorientierung;
use App\Utilities\Format;
use App\Utilities\Html;
class BerechnungM1M4
{
public static function load(int $projekts_id)
{
$orientierung = Orientierung::map();
$orientierung[1] = '';
$html = '';
$res = Raumorientierung::where('projekts_id', $projekts_id)
->where('nicht_in_orientierung', 0)
->orderBy('top_nr')
->get();
foreach ($res as $key => $_objekte) {
$raumorientierung_id = $_objekte->id;
$_raume_m1 = Raumalles::where('projekts_id', $projekts_id)->where('raumorientierung_id', $raumorientierung_id)->where('methodes_id', 1)->orderBy('raum')->get();
$_raume_m2 = Raumalles::where('projekts_id', $projekts_id)->where('raumorientierung_id', $raumorientierung_id)->whereIn('methodes_id', [2, 8])->get();
$_raume_m3 = Raumalles::where('projekts_id', $projekts_id)->where('raumorientierung_id', $raumorientierung_id)->whereIn('methodes_id', [3, 7])->get();
$pagebrake = \count($_raume_m1) + \count($_raume_m2) + \count($_raume_m3);
if ($pagebrake > 45) {
$html .= '<table class="text-75">';
} else {
$html .= '<table class="text-75" style="page-break-inside:avoid;">';
}
$html .= '<tr>';
$html .= Html::td('Top Nr.', 'head center bl bt w10p');
$html .= Html::td('Geschoß', 'head bt bb');
$html .= Html::td('Orientierung', 'head bt bb');
$html .= Html::td('Type', 'head bt bb');
$html .= Html::td('Raum', 'head bt bb');
$html .= Html::td('qm', 'head right bt bb');
$html .= Html::td('', 'head bt bb');
$html .= Html::td('Faktor', 'head bt bb');
$html .= Html::td('', 'head bt bb');
$html .= Html::td('Faktor', 'head bt bb');
$html .= Html::td('', 'head bt bb');
$html .= Html::td('Nw', 'head bt bb');
$html .= Html::td('Nw', 'head bt bb br');
$html .= '</tr>';
/********************************************************
METHODE 1
********************************************************/
foreach ($_raume_m1 as $key => $_raum) {
if ($key > 0) {
$_objekte['top_nr'] = '';
$_raum['geschoss'] = '';
$_objekte['orientierung'] = '';
$_objekte['type'] = '';
} else {
$oid = $_objekte['orientierungs_id'];
$_objekte['orientierung'] = $orientierung[$oid];
}
$html .= '<tr>';
$html .= Html::td($_objekte['top_nr'], 'head center bl br');
$html .= Html::td($_raum['geschoss'], 'br');
$html .= Html::td($_objekte['orientierung'], 'br');
$html .= Html::td($_objekte['type'], 'br');
$html .= Html::td($_raum['raum'], 'br');
$html .= Html::td(Format::numeric($_raum->qm, 2), 'right br');
$html .= Html::td('', 'br', 7);
$html .= '</tr>';
}
$nutzwert_summe = 0;
/********************************************************
METHODE 2 + 2b
********************************************************/
if (\count($_raume_m2) > 0) {
$html .= '<tr>';
$html .= Html::td('', 'head bl br');
$html .= Html::td('', 'br');
$html .= Html::td('', 'br');
$html .= Html::td('', 'br');
$html .= Html::td('', 'br');
$html .= Html::td(Format::numeric($_objekte->qm_m1, 2), 'right bt br bb');
$html .= Html::td('', 'bt br bb');
$html .= Html::td('', 'bt br bb');
$html .= Html::td('x', 'center bt br bb');
$html .= Html::td(Format::numeric($_objekte->factor, 3), 'right bt br bb');
$html .= Html::td('=', 'center bt br bb');
$nutzwert = $_objekte->qm_m1 * $_objekte->factor;
$html .= Html::td(Format::numeric($nutzwert, 3), 'right bt br bb');
$html .= Html::td(round($nutzwert), 'right center bt br bb');
$html .= '</tr>';
$factor_summe = 0;
// $zunutzwert = 0;
foreach ($_raume_m2 as $key => $_raum) {
$html .= '<tr>';
$html .= Html::td('', 'head bl br');
$html .= Html::td('', 'br');
$html .= Html::td('', 'br');
$html .= Html::td('', 'br');
$html .= Html::td($_raum->raum, 'br');
$html .= Html::td(Format::numeric($_raum->qm, 2), 'right br bb');
$html .= Html::td('x', 'center br bb');
$html .= Html::td(Format::numeric($_raum->factor, 3), 'right br bb');
if ($_raum['tt_raumart_id'] == 2) {
// Methode 2 (2)
$html .= Html::td('x', 'center br bb');
$html .= Html::td(Format::numeric($_objekte->factor, 3), 'right br bb');
$html .= Html::td('=', 'center br bb');
$factor_summe += $_raum->qm * $_raum->factor * $_objekte->factor;
$html .= Html::td(Format::numeric($factor_summe, 3), 'right br bb');
} else {
// Methode 2b (8) )
$html .= Html::td('', 'br bb');
$html .= Html::td('', 'br bb');
$html .= Html::td('=', 'center br bb');
$factor_summe += $_raum->qm * $_raum->factor;
$html .= Html::td(Format::numeric($factor_summe, 3), 'right br bb');
}
$html .= Html::td('', 'br bb');
$html .= '</tr>';
}
$ungerundet = $nutzwert + $factor_summe;
$nutzwert_summe = round($ungerundet);
// if ($zunutzwert) {
// $zunutzwert = $zunutzwert + $_objekte->qm_m1;
$html .= '<tr>';
$html .= Html::td('', 'head bl br');
$html .= Html::td('', 'br');
$html .= Html::td('', 'br');
$html .= Html::td('', 'br');
// $html .= '<td>Gesamtnutzfläche</td>';
// $html .= '<td class="right">'.Format::numeric($zunutzwert, 2).'</td>';
$html .= Html::td('', 'br');
$html .= Html::td('', 'br bb');
$html .= Html::td('', 'br bb');
$html .= Html::td('', 'br bb');
$html .= Html::td('', 'br bb');
$html .= Html::td('', 'br bb');
$html .= Html::td('', 'br bb');
$html .= Html::td(Format::numeric($ungerundet, 3), 'right br bb');
$html .= Html::td($nutzwert_summe, 'right br bb');
$html .= '</tr>';
} else {
$ungerundet = $_objekte->qm_m1 * $_objekte->factor;
$nutzwert_summe = round($ungerundet);
$html .= '<tr>';
$html .= Html::td('', 'head bl br');
$html .= Html::td('', 'br');
$html .= Html::td('', 'br');
$html .= Html::td('', 'br');
$html .= Html::td('', 'br');
$html .= Html::td(Format::numeric($_objekte->qm_m1, 2), 'right bt br bb');
$html .= Html::td('x', 'center bt br');
$html .= Html::td(Format::numeric($_objekte->factor, 3), 'right bt br');
$html .= Html::td('', 'bt br');
$html .= Html::td('', 'bt br');
$html .= Html::td('=', 'center bt br');
$html .= Html::td(Format::numeric($ungerundet, 3), 'right bt br');
$html .= Html::td($nutzwert_summe, 'right bt br');
$html .= '</tr>';
}
/********************************************************
METHODE 3 + 3b (3b wie Methode 3 aber ohne Wohnungsfactor)
********************************************************/
if (\count($_raume_m3) > 0) {
foreach ($_raume_m3 as $key => $_raum) {
$html .= '<tr>';
$html .= Html::td('', 'head bl br');
$html .= Html::td($_raum->geschoss, 'br');
$html .= Html::td('', 'br');
$html .= Html::td('', 'br');
$html .= Html::td($_raum->raum, 'br');
$html .= Html::td(Format::numeric($_raum->qm, 2), 'right br');
// Methode 3
if ($_raum->methodes_id == 3) {
$html .= Html::td('x', 'center bt br');
$html .= Html::td(Format::numeric($_objekte->factor, 3), 'right bt br');
$html .= Html::td('x', 'center bt br');
$html .= Html::td(Format::numeric($_raum->factor, 3), 'right bt br');
$html .= Html::td('=', 'center bt br');
$nutzwert = $_raum->qm * $_raum->factor * $_objekte->factor;
$html .= Html::td(Format::numeric($nutzwert, 3), 'right bt br');
} else {
$html .= Html::td('', 'bt br');
$html .= Html::td('', 'bt br');
$html .= Html::td('x', 'center bt br');
$html .= Html::td(Format::numeric($_raum->factor, 3), 'right bt br');
$html .= Html::td('=', 'center bt br');
$nutzwert = $_raum->qm * $_raum->factor;
$html .= Html::td(Format::numeric($nutzwert, 3), 'right bt br');
}
$nutzwert = round($nutzwert) < 1 ? 1 : round($nutzwert);
$html .= Html::td($nutzwert, 'right bt br');
$html .= '</tr>';
$nutzwert_summe += $nutzwert;
}
}
/********************************************************
METHODE 4
********************************************************/
$_raume_m4 = Raumalles::where('projekts_id', $projekts_id)->where('raumorientierung_id', $raumorientierung_id)->where('methodes_id', 4)->get();
if (\count($_raume_m4) > 0) {
foreach ($_raume_m4 as $key => $_raum) {
$ungerunded = $_raum->qm * $_raum->factor;
$nutzwert = round($nutzwert) < 1 ? 1 : round($nutzwert);
$nutzwert_summe += $nutzwert;
$html .= '<tr>';
$html .= Html::td('', 'head bl bl br');
$html .= Html::td($_raum->geschoss, 'br');
$html .= Html::td('', 'br');
$html .= Html::td('Zubehör', 'br');
$html .= Html::td($_raum->raum, 'br');
$html .= Html::td(Format::numeric($_raum->qm, 2), 'right br');
$html .= Html::td('', 'bt br');
$html .= Html::td('', 'bt br');
$html .= Html::td('x', 'center bt br');
$html .= Html::td(Format::numeric($_raum->factor, 3), 'right bt br');
$html .= Html::td('=', 'center bt br');
$html .= Html::td(Format::numeric($ungerunded, 3), 'right bt br');
$html .= Html::td($nutzwert, 'right bt br');
$html .= '</tr>';
}
}
// Fuß Zeile
$html .= '<tr>';
$html .= Html::td('', 'head bl bb');
$html .= Html::td('Nutzwert gerundet', 'head right bt bb', 11);
$html .= Html::td($nutzwert_summe, 'head right bt br bb');
$html .= '</tr>';
// dd($raumorientierung_id, $nutzwert_summe);
Raumorientierung::where('id', $raumorientierung_id)->update(['nutzwert_summe' => $nutzwert_summe]);
$html .= '</table>';
}
return $html;
}
}
@@ -1,91 +0,0 @@
<?php
namespace App\Actions\Generate\Nutzwerte;
use App\Models\Raumalles;
use App\Models\Raumorientierung;
use App\Utilities\Format;
use App\Utilities\Html;
class BerechnungM5
{
public static function load(int $projekts_id)
{
$html = '';
$result = Raumorientierung::where('projekts_id', $projekts_id)
->where('nicht_in_orientierung', 1)
->orderBy('top_nr')
->get();
if ($result->isEmpty()) {
return;
}
foreach ($result as $key => $_objekte) {
$raumorientierung_id = $_objekte->id;
$_raume_m5 = Raumalles::where('projekts_id', $projekts_id)->where('raumorientierung_id', $raumorientierung_id)->whereIn('methodes_id', [5, 6, 9])->get();
$summe_nutzwert = 0;
if (\count($_raume_m5) > 0) {
$html .= '<table class="text-75" style="page-break-inside:avoid;">';
$html .= '<tr>';
$html .= Html::td('Top', 'head bl bt w10p');
$html .= Html::td('Geschoß', 'head bt bb');
$html .= Html::td('Type', 'head bt bb');
$html .= Html::td('qm', 'head center bt bb');
$html .= Html::td('', 'head bt bb');
$html .= Html::td('Faktor', 'head center bt bb');
$html .= Html::td('', 'head bt bb');
$html .= Html::td('', 'head bt bb');
$html .= Html::td('Nw', 'center head bt bb br');
$html .= '</tr>';
// Methode 5
foreach ($_raume_m5 as $key => $_raum) {
if ($key > 0) {
$_objekte->top_nr = '';
$_raum->geschoss = '';
$_objekte->typ = '';
}
$html .= '<tr>';
$html .= Html::td($_objekte->top_nr, 'head center bl br');
$html .= Html::td($_raum->geschoss, 'br');
$html .= Html::td($_raum->raum, 'br');
$html .= Html::td(Format::numeric($_raum->qm, 2), 'center br');
$html .= Html::td('x', 'center br');
$html .= Html::td(Format::numeric($_raum->factor, 3), 'center br');
$html .= Html::td('=', 'center br');
$nutzwert = $_raum->qm * $_raum->factor;
$html .= Html::td(Format::numeric($nutzwert, 3), 'center br');
if ($_raum->methodes_id != 9) {
$html .= Html::td($nutzwert, 'center br');
} else {
$html .= Html::td('', 'br');
}
$html .= '</tr>';
$summe_nutzwert += $nutzwert;
}
$summe_nutzwert = $summe_nutzwert < 1 ? 1 : round($summe_nutzwert);
$html .= '<tr>';
$html .= Html::td('', 'head bl bb');
$html .= Html::td('Nutzwert gerundet', 'head right bt bb', 7);
$html .= Html::td($summe_nutzwert, 'head right grau bt br bb');
$html .= '</tr>';
$html .= '</table>';
}
}
return $html;
}
}
@@ -1,141 +0,0 @@
<?php
namespace App\Actions\Generate\Nutzwerte;
use App\Models\Raumalles;
use App\Models\Raumorientierung;
use Illuminate\Support\Facades\DB;
class BerechnungNutzwerte
{
public static function berechnen($projekts_id)
{
// 5
// Stellplätze berechnet nur mit Absolutem Faktor multipliziert,
// wird aber nicht in Orientierung aufgeführt und im PDF als eigenes Objekt ausgegeben.
// 6
// Zubehör zu Objekt der Methode 5
// (z.b ein Kellerabteil, das zu einem Stellplatz gehört, aber räumlich getrennt ist)
// Wird wie bei Methode 4 im PDF einzeln aufgelistet und
// nur mit Absolutem Faktor multipliziert, dann gerundet und der Nutzwert als ganze Zahl angeführt.
// Vor dem Objekt steht "Zubehör"
// 9
// Zubehör zu Objekt der Methode 5
// (ist direkt verbunden mit dem Objekt, zB. das Kellerabteil hinter dem Stellplatz,
// oder eine eigene Zufahrt nur zu einem Stellplatz).
// Wird mit Absolutem Faktor multipliziert und ungerundet zum Objekt der Methode 5 dazugezählt,
// dann erst die Summe des NW gerundet
// METHODEN 5, 6 ,9
// METHODEN 4
// METHODE 3 & 3b
$_raumorientierung = Raumorientierung::where('projekts_id', $projekts_id)
// ->where('nicht_in_orientierung', 0)
->get();
foreach ($_raumorientierung as $raumorientierung) {
$_raumalles = Raumalles::where('raumorientierung_id', $raumorientierung->id)
->where('projekts_id', $projekts_id)
->whereIn('methodes_id', [3, 4, 5, 6, 7, 9])
->get();
foreach ($_raumalles as $raumalle) {
$nutzwert_ungerundet = $raumalle->qm * $raumalle->factor;
switch ($raumalle->methodes_id) {
case '9':
Raumalles::where('id', $raumalle->id)
->where('methodes_id', 9)
->update(['nutzwert_ungerundet' => $nutzwert_ungerundet]);
break;
case '3':
$nutzwert_gerundet = round($raumalle->qm * $raumalle->factor * $raumorientierung->factor);
Raumalles::where('id', $raumalle->id)
->where('methodes_id', 3)
->update(['nutzwert_gerundet' => $nutzwert_ungerundet]);
break;
default:
$nutzwert_gerundet = round($raumalle->qm * $raumalle->factor);
Raumalles::where('id', $raumalle->id)
->where('methodes_id', $raumalle->methodes_id)
->update(['nutzwert_gerundet' => $nutzwert_gerundet]);
break;
}
Raumorientierung::where('id', $raumorientierung->id)
->where('nutzwert_summe', 0)
->update(['nutzwert_summe' => 1]);
$t1 = Raumalles::select('nutzwert_gerundet')
->where('raumorientierung_id', $raumorientierung->id)
->whereIn('methodes_id', [5, 6])
->get()
->sum('nutzwert_gerundet');
$t2 = Raumalles::select('nutzwert_ungerundet')
->where('raumorientierung_id', $raumorientierung->id)
->where('methodes_id', 9)
->get()
->sum('nutzwert_ungerundet');
$nutzwert_summe = round($t1 + $t2);
Raumorientierung::where('id', $raumorientierung->id)
->update(['nutzwert_summe' => $nutzwert_summe]);
}
}
// METHODEN 1, 2, 2b , 3, 3b, 4
$_raumorientierung = Raumorientierung::where('projekts_id', $projekts_id)
->where('nicht_in_orientierung', 0)
->get();
foreach ($_raumorientierung as $raumorientierung) {
// METHODE 1
$qm_m1 = Raumalles::select('qm')
->where('projekts_id', $projekts_id)
->where('raumorientierung_id', $raumorientierung->id)
->where('methodes_id', 1)
->get()
->sum('qm');
if ($qm_m1) {
Raumorientierung::where('id', $raumorientierung->id)
->where('projekts_id', $projekts_id)
->update(['qm_m1' => $qm_m1]);
}
// METHODE 1 & METHODE 2
$nw_m2 = Raumalles::select(DB::raw('sum(qm * factor) as total'))
->where('projekts_id', $projekts_id)
->where('raumorientierung_id', $raumorientierung->id)
->where('methodes_id', 2)
->get()
->sum('total');
$nw_m8 = Raumalles::select(DB::raw('sum(qm * factor) as total'))
->where('projekts_id', $projekts_id)
->where('raumorientierung_id', $raumorientierung->id)
->where('methodes_id', 8)
->get()
->sum('total');
$nw_m1_m2 = round((($qm_m1 + $nw_m2) * $raumorientierung->factor) + $nw_m8);
$nw_m3_m4 = Raumalles::select('nutzwert_gerundet')
->where('projekts_id', $projekts_id)
->where('raumorientierung_id', $raumorientierung->id)
->whereIn('methodes_id', [3, 4, 7])
->get()
->sum('nutzwert_gerundet');
$nutzwert_summe = $nw_m1_m2 + $nw_m3_m4;
Raumorientierung::where('id', $raumorientierung->id)
->update(['nutzwert_summe' => $nutzwert_summe]);
}
}
}
@@ -1,43 +0,0 @@
<?php
namespace App\Actions\Generate\Nutzwerte;
use App\Models\Orientierung;
use App\Models\Raumalles;
use App\Models\Raumorientierung;
class Zusammenstellung_Methode1
{
public static function load($projekts_id)
{
$res = Raumalles::select('raumorientierung_id', 'geschoss')->where('projekts_id', $projekts_id)->where('methodes_id', '1')->groupBy('raumorientierung_id', 'geschoss')->get();
$geschoss = [];
$raumorientierung_ids = [];
foreach ($res as $value) {
$geschoss[$value->raumorientierung_id][] = $value->geschoss;
$raumorientierung_ids[] = $value->raumorientierung_id;
}
$orientierung = Orientierung::map();
$orientierung[1] = '';
$res = Raumorientierung::where('projekts_id', $projekts_id)->whereIn('id', $raumorientierung_ids)->orderBy('top_nr')->get();
$return = [];
foreach ($res as $value) {
$tmp = [];
$tmp['id'] = $value->id;
$tmp['top_nr'] = $value->top_nr;
$tmp['type'] = $value->type;
$tmp['nutzwert_summe'] = $value->nutzwert_summe;
$tmp['orientierung'] = $orientierung[$value->orientierungs_id];
$tmp['geschoss'] = '';
if (isset($geschoss[$value['id']])) {
$tmp['geschoss'] = implode(',', $geschoss[$value->id]);
}
$return[] = $tmp;
}
return $return;
}
}
@@ -1,65 +0,0 @@
<?php
namespace App\Actions\Generate\Nutzwerte;
use App\Models\Raumalles;
use App\Models\Raumorientierung;
class Zusammenstellung_Methode5
{
public static function load($projekts_id)
{
// 5
// Stellplätze berechnet nur mit Absolutem Faktor multipliziert,
// wird aber nicht in Orientierung aufgeführt und im PDF als eigenes Objekt ausgegeben.
// 6
// Zubehör zu Objekt der Methode 5
// (z.b ein Kellerabteil, das zu einem Stellplatz gehört, aber räumlich getrennt ist)
// Wird wie bei Methode 4 im PDF einzeln aufgelistet und
// nur mit Absolutem Faktor multipliziert, dann gerundet und der Nutzwert als ganze Zahl angeführt.
// Vor dem Objekt steht "Zubehör"
// 9
// Zubehör zu Objekt der Methode 5
// (ist direkt verbunden mit dem Objekt, zB. das Kellerabteil hinter dem Stellplatz,
// oder eine eigene Zufahrt nur zu einem Stellplatz).
// Wird mit Absolutem Faktor multipliziert und ungerundet zum Objekt der Methode 5 dazugezählt,
// dann erst die Summe des NW gerundet
$res = Raumalles::select('raumorientierung_id', 'geschoss')->where('projekts_id', $projekts_id)->whereIn('methodes_id', [5, 9])->groupBy('raumorientierung_id', 'geschoss')->get();
$geschoss = [];
$raumorientierung_ids = [];
foreach ($res as $value) {
$geschoss[$value->raumorientierung_id][] = $value->geschoss;
$raumorientierung_ids[] = $value->raumorientierung_id;
}
$res = Raumalles::select('raumorientierung_id', 'raum')->where('projekts_id', $projekts_id)->whereIn('methodes_id', [5, 9])->get();
$type = [];
foreach ($res as $value) {
$type[$value->raumorientierung_id] = $value->raum;
}
$res = Raumorientierung::where('projekts_id', $projekts_id)->whereIn('id', $raumorientierung_ids)->orderBy('top_nr')->get();
$return = [];
foreach ($res as $value) {
$tmp = [];
$tmp['id'] = $value->id;
$tmp['top_nr'] = $value->top_nr;
$tmp['type'] = '';
if (isset($type[$value->id])) {
$tmp['type'] = $type[$value->id];
}
$tmp['nutzwert_summe'] = $value->nutzwert_summe;
$tmp['orientierung'] = '';
$tmp['geschoss'] = '';
if (isset($geschoss[$value['id']])) {
$tmp['geschoss'] = implode(',', $geschoss[$value->id]);
}
$return[] = $tmp;
}
return $return;
}
}
+5 -3
View File
@@ -32,6 +32,8 @@ class Pdf
public static $auftraggeber;
public static $zusammenstellung = [];
public static function make($projekte_id, $type, $mode)
{
@@ -138,9 +140,9 @@ class Pdf
case '9':
$html .= Deckblatt::load($inhalt, $textblock, $textblock2);
break;
// case '11':
// $html .= DigitaleSignatur::load($projekte_id);
// break;
case '10':
$html .= DigitaleSignatur::load($projekte_id);
break;
}
if ($inhalt->textblock2 and $inhalt->inhaltselement_id != 9) {
@@ -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>';
}
+12
View File
@@ -16,6 +16,18 @@ class Filter
return $return;
}
public static function array_remove($array, $filters = [])
{
$return = [];
foreach ($array as $value) {
if (! in_array($value, $filters)) {
$return[] = $value;
}
}
return $return;
}
public static function get_separator($row)
{
if (substr_count($row, '|') == 3) {
+5 -4
View File
@@ -4,9 +4,10 @@ namespace App\Actions\Generate\Utilities;
class Html
{
public static function table_header($header_row)
public static function table_header($header_row, $style = '')
{
$html = '<table class="table-striped">';
$style = " style=\" $style\"" ?? '';
$html = '<table autosize="1" class="table-striped" '.$style.'>';
$html .= '<thead><tr>';
foreach ($header_row as $value) {
$html .= '<th class="bl bt br bb center bg-sky">'.$value.'</th>';
@@ -16,10 +17,10 @@ class Html
return $html;
}
public static function table_footer($nutzwert_summe)
public static function table_footer($nutzwert_summe, $colspan = 10)
{
$html = '<tfooter><tr>';
$html .= '<th colspan="10" class="bl bt bb right bg-sky">Nutzwert gerundet</th>';
$html .= '<th colspan="'.$colspan.'" class="bl bt bb right bg-sky">Nutzwert gerundet</th>';
$html .= '<th class="bl bt br bb center bg-sky">'.$nutzwert_summe.'</th>';
$html .= '</tr></tfooter>';
+3 -28
View File
@@ -146,9 +146,7 @@ class GutachtenValidation
foreach ($res as $value) {
$raeume = $value->projektobjekteimdetail->toArray();
if (! count($raeume)) {
if (! count($value->projektobjekteimdetail)) {
Notification::make()
->title('Tabelle Objekte')
->info()
@@ -170,18 +168,7 @@ class GutachtenValidation
return false;
}
if (! $raeume['geschoss']) {
Notification::make()
->title('Tabelle Objekte im Detail')
->info()
->icon('heroicon-o-exclamation-triangle')
->duration(10000)
->body('Beim Objekt Top Nummer <b>'.$value->top_nummer.'</b> fehlt die Angabe des <u>Geschoßes</u>.')
->send();
return false;
}
if (! $raeume['raumart']) {
if (! $value->projektobjekteimdetail->first()->raumart) {
Notification::make()
->title('Tabelle Objekte im Detail')
->info()
@@ -192,7 +179,7 @@ class GutachtenValidation
return false;
}
if (! $raeume['flaeche']) {
if (! $value->projektobjekteimdetail->first()->flaeche) {
Notification::make()
->title('Tabelle Objekte im Detail')
->info()
@@ -232,18 +219,6 @@ class GutachtenValidation
return false;
}
// KANN 0 SEIN
// if ($value->faktor == 0) {
// Notification::make()
// ->title('Tabelle Räume Methoden')
// ->info()
// ->icon('heroicon-o-exclamation-triangle')
// ->duration(10000)
// ->body('Für den Raum <b>'.$value->raumart.'</b> fehlt die Angabe des <u>Faktors</u>.')
// ->send();
// return false;
// }
}
/**
@@ -5,6 +5,7 @@ namespace App\Filament\Resources\Projektes\RelationManagers;
use App\Actions\Create\CreateProjektMethoden;
use App\Models\Methode;
use App\Models\ProjektMethode;
use App\Models\ProjektObjekteImDetail;
use Filament\Actions\Action;
use Filament\Actions\BulkAction;
use Filament\Actions\BulkActionGroup;
@@ -59,8 +60,12 @@ class ProjektMethodesRelationManager extends RelationManager
->width('1rem')
->rules(['required', 'faktor' => 'decimal:0,2'])
->searchable()
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshMethods');
->afterStateUpdated(function ($record) {
$objects = ProjektObjekteImDetail::where('projekte_id', $record['projekte_id'])->where('raumart', $record['raumart'])->get();
foreach ($objects as $value) {
$nutzwert = round($record['faktor'] * $value->flaeche, 2);
ProjektObjekteImDetail::where('id', $value->id)->update(['nutzwert' => $nutzwert]);
}
})->validationMessages([
'required' => 'Die Eingabe eines Faktors ist erforderlich.',
'decimal' => 'Für den Faktors sind zwei Dezimalstellen erforderlich.',
@@ -130,6 +135,7 @@ class ProjektMethodesRelationManager extends RelationManager
->icon('phosphor-function')
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
/** @var object $record */
ProjektMethode::where('id', '=', $record->id)
->update(
['faktor' => $data['faktor']]
@@ -151,6 +157,7 @@ class ProjektMethodesRelationManager extends RelationManager
->icon('phosphor-calculator')
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
/** @var object $record */
ProjektMethode::where('id', '=', $record->id)
->update(
['methode_id' => $data['methode_id']]
@@ -3,7 +3,6 @@
namespace App\Filament\Resources\Projektes\RelationManagers;
use App\Models\ProjektObjekteImDetail;
use Filament\Actions\BulkAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\CreateAction;
use Filament\Actions\DeleteAction;
@@ -20,7 +19,6 @@ use Filament\Tables\Columns\TextInputColumn;
use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\HtmlString;
use Livewire\Component;
@@ -44,17 +42,14 @@ class ProjektObjekteImDetailRelationManager extends RelationManager
Select::make('projekt_objekte_id')
->relationship('top_nummer', 'top_nummer', fn (Builder $query) => $query->where('projekte_id', $this->getOwnerRecord()->id))
->required()
->searchable()
->columnSpan(3),
->searchable(),
TextInput::make('raumart')
->required()
->maxLength(255)
->columnSpan(3),
->maxLength(255),
TextInput::make('geschoss')
->required()
->maxLength(255)
->suffixIcon('phosphor-building')
->columnSpan(2),
->suffixIcon('phosphor-building'),
TextInput::make('flaeche')
->suffix(new HtmlString(' m&sup2;'))
->rules(['required'])
@@ -65,18 +60,8 @@ class ProjektObjekteImDetailRelationManager extends RelationManager
])
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshProjektAllgemeinflaechen');
})
->columnSpan(2),
TextInput::make('faktor')
->suffixIcon('phosphor-function')
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshProjektObjekteImDetail');
})->validationMessages([
'required' => 'Die Eingabe eines Faktors ist erforderlich.',
'decimal' => 'Für den Faktors sind zwei Dezimalstellen erforderlich.',
])
->columnSpan(2),
])->columns(6);
}),
]);
}
public function table(Table $table): Table
@@ -87,29 +72,16 @@ class ProjektObjekteImDetailRelationManager extends RelationManager
->recordTitleAttribute('top_nummer')
->columns([
TextColumn::make('top_nummer.top_nummer')
->sortable()
->extraAttributes(['pointer-events' => 'none'])
->searchable()
->label('Top'),
TextColumn::make('geschoss')->searchable(),
TextColumn::make('raumart')->searchable(),
TextInputColumn::make('faktor')
->extraInputAttributes(['onClick' => 'this.select()'])
->suffixIcon('phosphor-function')
->width('1rem')
->rules(['required'])
TextColumn::make('raumart')->searchable()->sortable(),
TextColumn::make('methode.faktor')
->icon('phosphor-function')
->searchable()
->afterStateUpdated(function ($record, Component $livewire) {
$object = ProjektObjekteImDetail::find($record['id']);
$object->nutzwert = round($object->faktor * $object->flaeche, 2);
$object->save();
$livewire->dispatch('refreshProjektObjekteImDetail');
})->validationMessages([
'required' => 'Die Eingabe eines Faktors ist erforderlich.',
'decimal' => 'Für den Faktors sind zwei Dezimalstellen erforderlich.',
]),
->label('Faktor'),
TextInputColumn::make('flaeche')
->extraInputAttributes(['onClick' => 'this.select()'])
->summarize(Sum::make()->label('Gesammt')->numeric(
@@ -122,9 +94,8 @@ class ProjektObjekteImDetailRelationManager extends RelationManager
->label('Fläche')
->searchable()
->afterStateUpdated(function ($record, Component $livewire) {
$object = ProjektObjekteImDetail::find($record['id']);
$object->nutzwert = round($object->faktor * $object->flaeche, 2);
$object->nutzwert = round($record->methode->faktor * $object->flaeche, 2);
$object->save();
$livewire->dispatch('refreshProjektObjekteImDetail');
@@ -176,30 +147,6 @@ class ProjektObjekteImDetailRelationManager extends RelationManager
])
->toolbarActions([
BulkActionGroup::make([
BulkAction::make('faktor')
->color('primary')
->label('Faktor zuweisen')
->schema([
TextInput::make('faktor')
->prefixIcon('phosphor-calculator')
->numeric()
->required(),
])
->icon('phosphor-calculator')
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
$nutzwert = round($data['faktor'] * $record->flaeche);
ProjektObjekteImDetail::where('id', '=', $record->id)
->update(
[
'faktor' => $data['faktor'],
'nutzwert' => $nutzwert,
]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshProjektObjekteImDetail');
}),
DeleteBulkAction::make()->after(function (Component $livewire) {
$livewire->dispatch('refreshProjektObjekteImDetail');
}),
@@ -65,6 +65,7 @@ class ProjektObjekteRelationManager extends RelationManager
->columns([
TextColumn::make('top_nummer')
->alignCenter()
->sortable()
->label('Top Nummer')
->searchable()
->extraHeaderAttributes([
@@ -92,7 +93,6 @@ class ProjektObjekteRelationManager extends RelationManager
->toggleable()
->width('2rem')
->label('Orientierung')
->selectablePlaceholder(true)
->options(Orientierung::pluck('name', 'id'))
->selectablePlaceholder(false)
->disableOptionWhen(fn (string $value): bool => in_array($value, [2, 11, 24, 33, 36]))
@@ -232,6 +232,7 @@ class ProjektObjekteRelationManager extends RelationManager
->default(0)
->label('Objekte "Nicht in Orientierung" anzeigen'),
])
->deferFilters(false)
->recordActions([
EditAction::make()->iconButton()
->mutateDataUsing(function (array $data): array {
@@ -275,6 +276,7 @@ class ProjektObjekteRelationManager extends RelationManager
->icon('phosphor-align-center-horizontal-simple')
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->where('nicht_in_orientierung', '=', false)
->update(
@@ -299,6 +301,7 @@ class ProjektObjekteRelationManager extends RelationManager
->icon('phosphor-compass')
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
['orientierung_id' => $data['methode_id']]
@@ -323,6 +326,7 @@ class ProjektObjekteRelationManager extends RelationManager
->icon('phosphor-check-square')
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
['nicht_in_orientierung' => 1]
@@ -344,6 +348,7 @@ class ProjektObjekteRelationManager extends RelationManager
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
$nutzwert = $this->sum_nutzwerte('a', $data['a'], $record);
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
[
@@ -367,6 +372,7 @@ class ProjektObjekteRelationManager extends RelationManager
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
$nutzwert = $this->sum_nutzwerte('b', $data['b'], $record);
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
[
@@ -390,6 +396,7 @@ class ProjektObjekteRelationManager extends RelationManager
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
$nutzwert = $this->sum_nutzwerte('c', $data['c'], $record);
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
[
@@ -413,6 +420,7 @@ class ProjektObjekteRelationManager extends RelationManager
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
$nutzwert = $this->sum_nutzwerte('d', $data['d'], $record);
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
[
@@ -436,6 +444,7 @@ class ProjektObjekteRelationManager extends RelationManager
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
$nutzwert = $this->sum_nutzwerte('e', $data['e'], $record);
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
[
@@ -459,6 +468,7 @@ class ProjektObjekteRelationManager extends RelationManager
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
$nutzwert = $this->sum_nutzwerte('f', $data['f'], $record);
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
[
@@ -482,6 +492,7 @@ class ProjektObjekteRelationManager extends RelationManager
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
$nutzwert = $this->sum_nutzwerte('g', $data['g'], $record);
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
[
@@ -505,6 +516,7 @@ class ProjektObjekteRelationManager extends RelationManager
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
$nutzwert = $this->sum_nutzwerte('h', $data['h'], $record);
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
[
@@ -528,6 +540,7 @@ class ProjektObjekteRelationManager extends RelationManager
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
$nutzwert = $this->sum_nutzwerte('i', $data['i'], $record);
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
[
@@ -551,6 +564,7 @@ class ProjektObjekteRelationManager extends RelationManager
->action(function (Collection $records, array $data): void {
foreach ($records as $record) {
$nutzwert = $this->sum_nutzwerte('j', $data['j'], $record);
/** @var object $record */
ProjektObjekte::where('id', '=', $record->id)
->update(
[
@@ -4,6 +4,7 @@ namespace App\Filament\Resources\Projektes\Schemas;
use App\Enums\ProjektStatus;
use App\Models\Projekte;
use Filament\Actions\Action;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Radio;
use Filament\Forms\Components\RichEditor;
@@ -32,25 +33,41 @@ class ProjekteForm
->schema([
TextInput::make('offizieller_name')
->label('Offizieller Name')
->required()
->suffixAction(
Action::make('copy')
->tooltip('Kopieren')
->icon('heroicon-s-clipboard-document-check')
->action(function ($livewire, $state) {
$livewire->js('window.navigator.clipboard.writeText("'.$state.'");');
})
)
->belowContent([
'Kann mit "###OFFIZIELLER_NAME###" im Text verwendet werden.',
]),
'Als Platzhalter "###OFFIZIELLER_NAME###"',
])
->required(),
TextInput::make('interner_name')
->label('Interner Name')
->required()
->suffixAction(
Action::make('copy')
->tooltip('Kopieren')
->icon('heroicon-s-clipboard-document-check')
->action(function ($livewire, $state) {
$livewire->js('window.navigator.clipboard.writeText("'.$state.'");');
})
)
->belowContent([
'Kann mit "###INTERNER_NAME###" im Text verwendet werden.',
]),
'Als Platzhalter "###INTERNER_NAME###"',
])
->required(),
TextInput::make('ort')->required()->suffix('am')
->belowContent([
'Kann mit "###ORT###" im Text verwendet werden.',
'Als Platzhalter "###ORT###"',
]),
DatePicker::make('erstellung')
->label('Datum der Erstellung')
->required()
->belowContent([
'Kann mit "###DATUM###" im Text verwendet werden.',
'Als Platzhalter "###DATUM###"',
]),
])->columns(2),
Tab::make('Zuordnung')
@@ -77,11 +77,12 @@ class TextblockForm
->schema([
TextInput::make('hilfe_titel')
->aboveLabel([
'Dieser Inhalt wird dem Benutzer an entsprechender Stelle bei der Bearbeitung des Gutachtens angezeigt.',
'Wird dem Benutzer bei der Bearbeitung dieses Inhaltselements angezeigt.',
])
->label('Überschrift')
->columnSpanFull(),
Textarea::make('hilfe_description'),
Textarea::make('hilfe_description')
->label('Text'),
FileUpload::make('hilfe_image')
->image()
->label('Bild')
+1 -1
View File
@@ -42,6 +42,6 @@ class ProjektObjekteImDetail extends Model
public function methode()
{
return $this->hasOne(ProjektMethode::class, 'raumart', 'raumart');
return $this->belongsTo(ProjektMethode::class, 'raumart', 'raumart');
}
}
+21 -21
View File
@@ -531,7 +531,7 @@ app('router')->setCompiledRoutes(
array (
0 =>
array (
'_route' => 'generated::uyjGbzR3XQdo3KhH',
'_route' => 'generated::ujfob9beT20afLlN',
),
1 => NULL,
2 =>
@@ -551,7 +551,7 @@ app('router')->setCompiledRoutes(
array (
0 =>
array (
'_route' => 'generated::KwFA2GneULEbvRRP',
'_route' => 'generated::xo3kJGB2Kai4wz1c',
),
1 => NULL,
2 =>
@@ -609,7 +609,7 @@ app('router')->setCompiledRoutes(
array (
0 =>
array (
'_route' => 'generated::edh6JsQpgu03vVcj',
'_route' => 'generated::SWoGYxdjyUAOcgVh',
),
1 => NULL,
2 =>
@@ -629,7 +629,7 @@ app('router')->setCompiledRoutes(
array (
0 =>
array (
'_route' => 'generated::eNLlLrDplQqPnuec',
'_route' => 'generated::amiq2DoYewzdm8Y8',
),
1 => NULL,
2 =>
@@ -649,7 +649,7 @@ app('router')->setCompiledRoutes(
array (
0 =>
array (
'_route' => 'generated::4H8cKn4rChdKkF4S',
'_route' => 'generated::S1KEgmy9kS1sVnDX',
),
1 => NULL,
2 =>
@@ -669,7 +669,7 @@ app('router')->setCompiledRoutes(
array (
0 =>
array (
'_route' => 'generated::FZzcIvLYnObwCXv1',
'_route' => 'generated::pJN3i9aU8lWn299F',
),
1 => NULL,
2 =>
@@ -689,7 +689,7 @@ app('router')->setCompiledRoutes(
array (
0 =>
array (
'_route' => 'generated::dKL4xMJ3Tqv1laiq',
'_route' => 'generated::8pEsEgvP206TQHbt',
),
1 => NULL,
2 =>
@@ -2717,7 +2717,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL,
'withTrashed' => false,
),
'generated::uyjGbzR3XQdo3KhH' =>
'generated::ujfob9beT20afLlN' =>
array (
'methods' =>
array (
@@ -2729,7 +2729,7 @@ app('router')->setCompiledRoutes(
array (
'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile',
'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile',
'as' => 'generated::uyjGbzR3XQdo3KhH',
'as' => 'generated::ujfob9beT20afLlN',
),
'fallback' => false,
'defaults' =>
@@ -2745,7 +2745,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL,
'withTrashed' => false,
),
'generated::KwFA2GneULEbvRRP' =>
'generated::xo3kJGB2Kai4wz1c' =>
array (
'methods' =>
array (
@@ -2757,7 +2757,7 @@ app('router')->setCompiledRoutes(
array (
'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps',
'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps',
'as' => 'generated::KwFA2GneULEbvRRP',
'as' => 'generated::xo3kJGB2Kai4wz1c',
),
'fallback' => false,
'defaults' =>
@@ -2859,7 +2859,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL,
'withTrashed' => false,
),
'generated::edh6JsQpgu03vVcj' =>
'generated::SWoGYxdjyUAOcgVh' =>
array (
'methods' =>
array (
@@ -2888,7 +2888,7 @@ app('router')->setCompiledRoutes(
\'exception\' => $exception,
]), status: $exception ? 500 : 200);
}";s:5:"scope";s:54:"Illuminate\\Foundation\\Configuration\\ApplicationBuilder";s:4:"this";N;s:4:"self";s:32:"0000000000000f460000000000000000";}}',
'as' => 'generated::edh6JsQpgu03vVcj',
'as' => 'generated::SWoGYxdjyUAOcgVh',
),
'fallback' => false,
'defaults' =>
@@ -2904,7 +2904,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL,
'withTrashed' => false,
),
'generated::eNLlLrDplQqPnuec' =>
'generated::amiq2DoYewzdm8Y8' =>
array (
'methods' =>
array (
@@ -2926,7 +2926,7 @@ app('router')->setCompiledRoutes(
'where' =>
array (
),
'as' => 'generated::eNLlLrDplQqPnuec',
'as' => 'generated::amiq2DoYewzdm8Y8',
),
'fallback' => false,
'defaults' =>
@@ -2942,7 +2942,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL,
'withTrashed' => false,
),
'generated::4H8cKn4rChdKkF4S' =>
'generated::S1KEgmy9kS1sVnDX' =>
array (
'methods' =>
array (
@@ -2964,7 +2964,7 @@ app('router')->setCompiledRoutes(
'where' =>
array (
),
'as' => 'generated::4H8cKn4rChdKkF4S',
'as' => 'generated::S1KEgmy9kS1sVnDX',
),
'fallback' => false,
'defaults' =>
@@ -2980,7 +2980,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL,
'withTrashed' => false,
),
'generated::FZzcIvLYnObwCXv1' =>
'generated::pJN3i9aU8lWn299F' =>
array (
'methods' =>
array (
@@ -3002,7 +3002,7 @@ app('router')->setCompiledRoutes(
'where' =>
array (
),
'as' => 'generated::FZzcIvLYnObwCXv1',
'as' => 'generated::pJN3i9aU8lWn299F',
),
'fallback' => false,
'defaults' =>
@@ -3018,7 +3018,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL,
'withTrashed' => false,
),
'generated::dKL4xMJ3Tqv1laiq' =>
'generated::8pEsEgvP206TQHbt' =>
array (
'methods' =>
array (
@@ -3040,7 +3040,7 @@ app('router')->setCompiledRoutes(
'where' =>
array (
),
'as' => 'generated::dKL4xMJ3Tqv1laiq',
'as' => 'generated::8pEsEgvP206TQHbt',
),
'fallback' => false,
'defaults' =>
@@ -18,7 +18,6 @@ return new class extends Migration
$table->boolean('nicht_in_orientierung')->default(0);
$table->string('top_nummer')->nullable();
$table->string('type')->nullable();
$table->string('geschoss')->nullable();
$table->decimal('nutzwert', 5, 2)->default(0)->nullable();
// 10 Zusatzfelder
$table->decimal('a', 5, 2)->default(0);
@@ -17,7 +17,6 @@ return new class extends Migration
$table->foreignId('projekt_objekte_id')->constrained()->cascadeOnDelete();
$table->string('geschoss')->nullable();
$table->string('raumart')->nullable();
$table->double('faktor')->nullable();
$table->double('flaeche')->nullable();
$table->integer('nutzwert')->default(0)->nullable();
$table->timestamps();
@@ -15,7 +15,6 @@ return new class extends Migration
$table->id();
$table->foreignId('projekte_id')->constrained()->cascadeOnDelete();
$table->integer('methode_id')->nullable()->default(0);
$table->string('geschoss')->nullable();
$table->string('raumart')->nullable();
$table->decimal('faktor', 5, 2)->default(0);
$table->timestamps();
@@ -14,12 +14,6 @@ return new class extends Migration
Schema::create('inhaltselements', function (Blueprint $table) {
$table->id();
$table->string('name')->nullable();
$table->string('hilfe_titel')->nullable();
$table->text('hilfe_description')->nullable();
$table->string('hilfe_image')->nullable();
$table->timestamps();
});
}
+11 -10
View File
@@ -12,17 +12,18 @@ class InhaltselementSeeder extends Seeder
*/
public function run(): void
{
$sql = "INSERT INTO `inhaltselements` (`id`, `name`, `hilfe_titel`, `hilfe_description`, `hilfe_image`, `created_at`, `updated_at`)
$sql = "INSERT INTO `inhaltselements` (`id`, `name`)
VALUES
('1', 'INHALTSVERZEICHNIS', NULL, NULL, NULL, NULL, NULL),
('2', 'GRUNDBUCHSTAND', NULL, NULL, NULL, NULL, NULL),
('3', 'TABELLE § 6', NULL, NULL, NULL, NULL, NULL),
('4', 'ALLGEMEINFLÄCHEN', NULL, NULL, NULL, NULL, NULL),
('5', 'ZU UND ABSCHLÄGE', NULL, NULL, NULL, NULL, NULL),
('6', 'NUTZWERTBERECHNUNG', NULL, NULL, NULL, NULL, NULL),
('7', 'ZUSAMMENSTELLUNG', NULL, NULL, NULL, NULL, NULL),
('8', 'AUFTRAGGEBER', NULL, NULL, NULL, NULL, NULL),
('9', 'DECKBLATT', NULL, NULL, NULL, NULL, NULL);
('1', 'INHALTSVERZEICHNIS'),
('2', 'GRUNDBUCHSTAND'),
('3', 'TABELLE § 6'),
('4', 'ALLGEMEINFLÄCHEN'),
('5', 'ZU UND ABSCHLÄGE'),
('6', 'NUTZWERTBERECHNUNG'),
('7', 'ZUSAMMENSTELLUNG'),
('8', 'AUFTRAGGEBER'),
('9', 'DECKBLATT'),
('10', 'DIGITALE SIGNATUR');
";
DB::unprepared($sql);
}
File diff suppressed because it is too large. Load diff
@@ -2,4 +2,7 @@
Beim Importiert werden die Daten der Tabelle "<b>Allgemeinfläche</b>" angehängt.
<br>
Um neu zu starten können sie die Tabelle vor dem Import leeren.
<div class="text-danger-500 my-2">
Die erste Zeile in der CSV Liste (Titel) wird nicht importiert.
</div>
</div>
@@ -4,4 +4,6 @@
"Top Nummer" schon existieren werden die Daten entsprechend aktualisiert.
<br>
Um neu zu starten können sie diese Tabellen vor dem Import leeren.
<br>
Die erste Zeile der CSV Liste ist für die Titel reserviert und wird nicht importiert.
</div>
+1
View File
@@ -1,3 +1,4 @@
"Top Nummer","Raumart","Fläche"
"EG","Böschung N","76,83"
"EG","Böschung O"," 9,87"
"EG","Böschung S","11,55"
+1
View File
@@ -1,3 +1,4 @@
"Top Nummer","Geschoss","Raumart","Fläche"
"APG01 ","UG","Stellplatz+","14,25"
"APG02 ","UG","Stellplatz ","13,00"
"APG03 ","UG","Stellplatz+","16,20"