getId() . '-' . $foreignEntity->getId() . '-relate'; if (isset(self::$processing[$key])) { return; } self::$processing[$key] = true; try { // Prüfe ob Räumungsklage verknüpft ist $raumungsklage = $this->entityManager ->getRDBRepository('CAIKnowledge') ->getRelation($entity, 'vmhRumungsklage') ->findOne(); if ($raumungsklage) { $this->relateDocument($raumungsklage, 'dokumentesvmhraumungsklage', $foreignEntity); } // Prüfe ob Mietinkasso verknüpft ist $mietinkasso = $this->entityManager ->getRDBRepository('CAIKnowledge') ->getRelation($entity, 'mietinkasso') ->findOne(); if ($mietinkasso) { $this->relateDocument($mietinkasso, 'dokumentesmietinkasso', $foreignEntity); } } catch (\Exception $e) { $GLOBALS['log']->error('CAIKnowledge PropagateDocumentsUp (relate) Error: ' . $e->getMessage()); } finally { unset(self::$processing[$key]); } } public function afterUnrelate( Entity $entity, string $relationName, Entity $foreignEntity, \Espo\ORM\Repository\Option\UnrelateOptions $options ): void { // Nur für dokumentes-Beziehung if ($relationName !== 'dokumentes') { return; } // Vermeide Loops $key = $entity->getId() . '-' . $foreignEntity->getId() . '-unrelate'; if (isset(self::$processing[$key])) { return; } self::$processing[$key] = true; try { // Prüfe ob Räumungsklage verknüpft ist $raumungsklage = $this->entityManager ->getRDBRepository('CAIKnowledge') ->getRelation($entity, 'vmhRumungsklage') ->findOne(); if ($raumungsklage) { $this->unrelateDocument($raumungsklage, 'dokumentesvmhraumungsklage', $foreignEntity); } // Prüfe ob Mietinkasso verknüpft ist $mietinkasso = $this->entityManager ->getRDBRepository('CAIKnowledge') ->getRelation($entity, 'mietinkasso') ->findOne(); if ($mietinkasso) { $this->unrelateDocument($mietinkasso, 'dokumentesmietinkasso', $foreignEntity); } } catch (\Exception $e) { $GLOBALS['log']->error('CAIKnowledge PropagateDocumentsUp (unrelate) Error: ' . $e->getMessage()); } finally { unset(self::$processing[$key]); } } /** * Hilfsfunktion: Verknüpfe Dokument (nur wenn nicht bereits verknüpft) */ private function relateDocument(Entity $parentEntity, string $relationName, Entity $document): void { $repository = $this->entityManager->getRDBRepository($parentEntity->getEntityType()); $relation = $repository->getRelation($parentEntity, $relationName); // Prüfe ob bereits verknüpft $isRelated = $relation ->where(['id' => $document->getId()]) ->findOne(); if (!$isRelated) { $relation->relate($document); } } /** * Hilfsfunktion: Entknüpfe Dokument */ private function unrelateDocument(Entity $parentEntity, string $relationName, Entity $document): void { $repository = $this->entityManager->getRDBRepository($parentEntity->getEntityType()); $relation = $repository->getRelation($parentEntity, $relationName); // Prüfe ob verknüpft $isRelated = $relation ->where(['id' => $document->getId()]) ->findOne(); if ($isRelated) { $relation->unrelate($document); } } }