get('silent') || $options->get('skipHooks')) { return; } // Vermeide Loops $key = $entity->getId() . '-create-akte'; if (isset(self::$processing[$key])) { return; } self::$processing[$key] = true; try { // Prüfe ob Kündigung bereits eine AdvowareAkte hat $existingAkteId = $entity->get('advowareAktenId'); if ($existingAkteId) { $GLOBALS['log']->info("CKuendigung CreateAdvowareAkte: Kündigung already has AdvowareAkte: {$existingAkteId}"); unset(self::$processing[$key]); return; // Bereits vorhanden } // Prüfe ob verknüpfte Räumungsklagen eine Akte haben $raeumungsklagen = $this->entityManager ->getRDBRepository('CKuendigung') ->getRelation($entity, 'vmhRumungsklages') ->find(); foreach ($raeumungsklagen as $rk) { $rkAkteId = $rk->get('advowareAktenId'); if ($rkAkteId) { // Übernehme Akte von Räumungsklage $entity->set('advowareAktenId', $rkAkteId); $this->entityManager->saveEntity($entity, ['silent' => true, 'skipHooks' => true]); // Synchronisiere Aktennummer $akte = $this->entityManager->getEntity('CAdvowareAkten', $rkAkteId); if ($akte) { $this->syncAktennummer($entity, $akte); } $GLOBALS['log']->info("CKuendigung CreateAdvowareAkte: Using AdvowareAkte from Räumungsklage: {$rkAkteId}"); unset(self::$processing[$key]); return; } } // Keine Akte gefunden -> Erstelle neue $this->createNewAkte($entity); } catch (\Exception $e) { $GLOBALS['log']->error('CKuendigung CreateAdvowareAkte Error: ' . $e->getMessage()); } finally { unset(self::$processing[$key]); } } private function createNewAkte(Entity $kuendigung): void { // Hole Aktennummer aus Kündigung (falls vorhanden) $aktennummer = $kuendigung->get('aktennr'); if (!$aktennummer) { $aktennummer = time(); } // Generiere Aktenzeichen (wird in CAdvowareAkten gespeichert) $aktenzeichen = 'AZ-' . date('Y-m-d-His'); // Erstelle AdvowareAkte $akteData = [ 'name' => 'Advoware Akte - ' . $kuendigung->get('name'), 'aktennummer' => $aktennummer, 'aktenzeichen' => $aktenzeichen, 'syncStatus' => 'unclean', 'assignedUserId' => $kuendigung->get('assignedUserId') ]; // Copy teams $teamsIds = $kuendigung->getLinkMultipleIdList('teams'); if (!empty($teamsIds)) { $akteData['teamsIds'] = $teamsIds; } $akte = $this->entityManager->createEntity('CAdvowareAkten', $akteData); if ($akte) { // Verknüpfe mit Kündigung $kuendigung->set('advowareAktenId', $akte->getId()); $this->entityManager->saveEntity($kuendigung, ['silent' => true, 'skipHooks' => true]); // Synchronisiere Aktennummer zurück zur Kündigung (falls leer war) if (!$kuendigung->get('aktennr') && $akte->get('aktennummer')) { $kuendigung->set('aktennr', $akte->get('aktennummer')); $this->entityManager->saveEntity($kuendigung, ['silent' => true, 'skipHooks' => true]); } $GLOBALS['log']->info("CKuendigung CreateAdvowareAkte: Created new AdvowareAkte: {$akte->getId()}"); } else { $GLOBALS['log']->error('CKuendigung CreateAdvowareAkte: Failed to create AdvowareAkte'); } } private function syncAktennummer(Entity $kuendigung, Entity $akte): void { // Synchronisiere nur Aktennummer (nicht Aktenzeichen, das ist in der Beziehung) if (!$kuendigung->get('aktennr') && $akte->get('aktennummer')) { $kuendigung->set('aktennr', $akte->get('aktennummer')); $this->entityManager->saveEntity($kuendigung, ['silent' => true, 'skipHooks' => true]); $GLOBALS['log']->info("CKuendigung CreateAdvowareAkte: Synchronized Aktennummer"); } } }