getId() . '-' . $foreignEntity->getId() . '-relate'; if (isset(self::$processing[$key])) { return; } self::$processing[$key] = true; try { // Hole verbundene AdvowareAkten $advowareAkten = $this->entityManager ->getRDBRepository('CMietinkasso') ->getRelation($entity, 'advowareAkten') ->findOne(); // Verknüpfe Dokument mit AdvowareAkten if ($advowareAkten) { $this->relateDocument($advowareAkten, 'dokumentes', $foreignEntity); } // Hole verbundene AIKnowledge $aIKnowledge = $this->entityManager ->getRDBRepository('CMietinkasso') ->getRelation($entity, 'aIKnowledge') ->findOne(); // Verknüpfe Dokument mit AIKnowledge if ($aIKnowledge) { $this->relateDocument($aIKnowledge, 'dokumentes', $foreignEntity); } } catch (\Exception $e) { $GLOBALS['log']->error('CMietinkasso PropagateDocuments (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 dokumentesmietinkasso-Beziehung if ($relationName !== 'dokumentesmietinkasso') { return; } // Vermeide Loops $key = $entity->getId() . '-' . $foreignEntity->getId() . '-unrelate'; if (isset(self::$processing[$key])) { return; } self::$processing[$key] = true; try { // Hole verbundene AdvowareAkten $advowareAkten = $this->entityManager ->getRDBRepository('CMietinkasso') ->getRelation($entity, 'advowareAkten') ->findOne(); // Entknüpfe Dokument von AdvowareAkten if ($advowareAkten) { $this->unrelateDocument($advowareAkten, 'dokumentes', $foreignEntity); } // Hole verbundene AIKnowledge $aIKnowledge = $this->entityManager ->getRDBRepository('CMietinkasso') ->getRelation($entity, 'aIKnowledge') ->findOne(); // Entknüpfe Dokument von AIKnowledge if ($aIKnowledge) { $this->unrelateDocument($aIKnowledge, 'dokumentes', $foreignEntity); } } catch (\Exception $e) { $GLOBALS['log']->error('CMietinkasso PropagateDocuments (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); } } }