options['projekte_id']; self::$raumarts[] = $this->data['raumart']; self::$top_nummers[] = $this->data['top_nummer']; $projekt_objekte_id = ProjektObjekte::where('projekte_id', self::$projekte_id) ->where('top_nummer', $this->data['top_nummer']) ->value('id'); $projekt_methode_id = ProjektMethode::firstOrNew([ 'projekte_id' => self::$projekte_id, 'raumart' => $this->data['raumart'], ]); if ($projekt_objekte_id && ProjektObjekteImDetail::where('projekte_id', self::$projekte_id) ->where('projekt_objekte_id', $projekt_objekte_id) ->where('projekt_methode_id', $projekt_methode_id) ->first() ) { self::$count_have++; } else { self::$count_new++; } return ProjektObjekteImDetail::firstOrNew([ 'projekte_id' => self::$projekte_id, 'projekt_objekte_id' => $projekt_objekte_id, 'projekt_methode_id' => $projekt_methode_id, ]); } public function getCsvSettings(): array { return [ // Setzt das Anführungszeichen auf leer, // um "text" als text zu lesen 'enclosure' => '', 'escape_character' => '\\', 'use_bom' => true, ]; } public static function getColumns(): array { return [ ImportColumn::make('top_nummer') ->label('Top Nummer') ->validationAttribute('Top Nummer') ->example('W07') ->rules(['required', 'max:255']) ->relationship(resolveUsing: function (string $state, $data): ?ProjektObjekte { return ProjektObjekte::query() ->where('projekte_id', self::$projekte_id) ->where('top_nummer', $state) ->firstOrCreate([ 'projekte_id' => self::$projekte_id, 'top_nummer' => $state, ]); }) ->castStateUsing(function (string $state) { $state = trim($state); return iconv(mb_detect_encoding($state, mb_detect_order(), true), 'UTF-8', $state); }), ImportColumn::make('geschoss') ->validationAttribute('Geschoss') ->example('EG') ->rules(['required', 'max:255']) ->castStateUsing(function (string $state) { $state = trim($state); return iconv(mb_detect_encoding($state, mb_detect_order(), true), 'UTF-8', $state); }), ImportColumn::make('raumart') ->validationAttribute('Raumart') ->example('Stiegenhaus') ->rules(['required', 'max:32']) ->castStateUsing(function (string $state) { $state = trim($state); return iconv(mb_detect_encoding($state, mb_detect_order(), true), 'UTF-8', $state); }), ImportColumn::make('flaeche') ->label('Fläche') ->validationAttribute('Fläche') ->rules(['required']) ->example('14,75') ->castStateUsing(function (string $state): ?float { if (blank($state) || (float) $state == 0) { return null; } $state = str_replace(',', '.', $state); $state = preg_replace('/[^0-9.]/', '', $state); $state = floatval($state); return round($state, precision: 2); }), ]; } public static function getCompletedNotificationBody(Import $import): string { $projektObjekteImDetailDeleted = ProjektObjekteImDetail::where('projekte_id', self::$projekte_id) ->whereNotIn('raumart', self::$raumarts) ->delete(); $projektObjekteDeleted = ProjektObjekte::query() ->where('projekte_id', self::$projekte_id) ->whereNotIn('top_nummer', self::$top_nummers) ->delete(); $body = ' Der Import der Objekte ist abgeschlossen. Es wurden '.Number::format($import->successful_rows).' Zeile(n) importiert.'; if ($failedRowsCount = $import->getFailedRowsCount()) { $body .= ' Bei '.Number::format($failedRowsCount).' Zeile(n) ist der Import fehlgeschlagen.'; } $body .= '

'; $body .= 'Bestehende Objekte: '.self::$count_have.'
'; $body .= 'Neue Objekte: '.self::$count_new.'
'; $body .= 'Objekte im Detail gelöscht: '.$projektObjekteImDetailDeleted.'
'; $body .= 'Objekte gelöscht: '.$projektObjekteDeleted; return $body; } }