where('name', self::PROJEKT)->exists()) { $this->command->info('Demodaten sind schon vorhanden.'); return; } $mandant = Mandant::query()->firstOrCreate(['name' => 'Demo-Mandant']); $projekt = Projekt::query()->create([ 'mandant_id' => $mandant->id, 'land' => Land::DE, 'name' => self::PROJEKT, 'nummer' => 'P-2025-01', 'auftraggeber' => 'DB InfraGO AG', ]); $an = fn (string $name) => Auftragnehmer::query()->firstOrCreate( ['mandant_id' => $mandant->id, 'land' => Land::DE, 'name' => $name], ); $arge = $an('ARGE Musterbau'); $tunnel = $an('Tunnelbau Beispiel GmbH'); $oberleitung = $an('Oberleitung Nord GmbH'); $abschnitte = []; foreach ([1, 2, 3, 4] as $nr) { $abschnitte[$nr] = Abschnitt::query()->create([ 'projekt_id' => $projekt->id, 'bezeichnung' => 'PFA '.$nr, 'sortierung' => $nr, ]); } $vertrag = fn (Abschnitt $abschnitt, Auftragnehmer $auftragnehmer, string $bezeichnung) => Vertrag::query()->create([ 'abschnitt_id' => $abschnitt->id, 'auftragnehmer_id' => $auftragnehmer->id, 'bezeichnung' => $bezeichnung, 'vertrag_vom' => '2025-03-01', ]); $vertrag($abschnitte[1], $oberleitung, 'Oberleitung'); $vertrag($abschnitte[2], $oberleitung, 'Oberleitung'); $gleisbauPfa3 = $vertrag($abschnitte[3], $arge, 'Gleisbau'); $vertrag($abschnitte[3], $tunnel, 'Tunnelbau'); $vertrag($abschnitte[3], $oberleitung, 'Oberleitung'); $gleisbauPfa4 = $vertrag($abschnitte[4], $arge, 'Gleisbau'); $vertrag($abschnitte[4], $tunnel, 'Tunnelbau'); $vertrag($abschnitte[4], $oberleitung, 'Oberleitung'); foreach (['LV 01 Baustelleneinrichtung', 'LV 03 Oberbau', 'LV 05 Entwässerung', 'LV 07 Kabeltiefbau'] as $bezeichnung) { $gleisbauPfa4->leistungsverzeichnisse()->create(['bezeichnung' => $bezeichnung, 'import_status' => VerarbeitungStatus::Wartet]); $gleisbauPfa3->leistungsverzeichnisse()->create(['bezeichnung' => $bezeichnung, 'import_status' => VerarbeitungStatus::Wartet]); } $this->nachtrag($gleisbauPfa4, 'N14', 'Lieferung besohlter Schwellen', '2026-09-29', ['MKA 112'], [ ['N14.0010', 'Schwelle B70 mit Besohlung liefern', 420, 'St', 137.50], ['N14.0020', 'Zulage Verlegen besohlter Schwellen', 420, 'St', 12.40], ]); $this->nachtrag($gleisbauPfa4, 'N16', 'Kamerabefahrung und Spülen der Entwässerungsleitungen', '2026-09-15', ['MKA 98'], [ ['N16.0010', 'Kamerabefahrung Leitungen DN 160', 850, 'm', 3.20], ['N16.0020', 'Leitungen DN 160 spülen', 850, 'm', 2.10], ]); $this->nachtrag($gleisbauPfa4, 'N21', 'Kabelschutzrohr DN 110 verlegen', '2026-10-01', ['MKA 131', 'MKA 133'], [ ['N21.0010', 'Kabelschutzrohr DN 110 verlegen', 1200, 'm', 36.80], ]); $testbenutzer = User::query()->where('email', 'test@example.com')->first(); if ($testbenutzer !== null) { $testbenutzer->mandant()->associate($mandant)->save(); $projekt->mitglieder()->attach($testbenutzer, ['rolle' => Projektrolle::Projektleiter->value]); } } /** * @param list $mka * @param list $positionen */ private function nachtrag(Vertrag $vertrag, string $nummer, string $betreff, string $eingang, array $mka, array $positionen): Nachtrag { $nachtrag = $vertrag->nachtraege()->create([ 'nummer' => $nummer, 'betreff' => $betreff, 'eingang_am' => $eingang, 'mka_bezug' => $mka, 'status' => NachtragStatus::Eingegangen, ]); foreach ($positionen as $i => [$oz, $kurztext, $menge, $einheit, $ep]) { $nachtrag->positionen()->create([ 'oz' => $oz, 'kurztext' => $kurztext, 'menge' => $menge, 'einheit' => $einheit, 'einheitspreis' => $ep, 'sortierung' => $i, ]); } return $nachtrag; } }