diff --git a/custom/Espo/Custom/Hooks/CAIKnowledge/PropagateDocumentsUp.php b/custom/Espo/Custom/Hooks/CAIKnowledge/PropagateDocumentsUp.php new file mode 100644 index 00000000..878ba8d6 --- /dev/null +++ b/custom/Espo/Custom/Hooks/CAIKnowledge/PropagateDocumentsUp.php @@ -0,0 +1,155 @@ +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); + } + } +} diff --git a/custom/Espo/Custom/Hooks/CAdvowareAkten/PropagateDocumentsUp.php b/custom/Espo/Custom/Hooks/CAdvowareAkten/PropagateDocumentsUp.php new file mode 100644 index 00000000..6994afba --- /dev/null +++ b/custom/Espo/Custom/Hooks/CAdvowareAkten/PropagateDocumentsUp.php @@ -0,0 +1,155 @@ +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('CAdvowareAkten') + ->getRelation($entity, 'vmhRumungsklage') + ->findOne(); + + if ($raumungsklage) { + $this->relateDocument($raumungsklage, 'dokumentesvmhraumungsklage', $foreignEntity); + } + + // Prüfe ob Mietinkasso verknüpft ist + $mietinkasso = $this->entityManager + ->getRDBRepository('CAdvowareAkten') + ->getRelation($entity, 'mietinkasso') + ->findOne(); + + if ($mietinkasso) { + $this->relateDocument($mietinkasso, 'dokumentesmietinkasso', $foreignEntity); + } + + } catch (\Exception $e) { + $GLOBALS['log']->error('CAdvowareAkten 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('CAdvowareAkten') + ->getRelation($entity, 'vmhRumungsklage') + ->findOne(); + + if ($raumungsklage) { + $this->unrelateDocument($raumungsklage, 'dokumentesvmhraumungsklage', $foreignEntity); + } + + // Prüfe ob Mietinkasso verknüpft ist + $mietinkasso = $this->entityManager + ->getRDBRepository('CAdvowareAkten') + ->getRelation($entity, 'mietinkasso') + ->findOne(); + + if ($mietinkasso) { + $this->unrelateDocument($mietinkasso, 'dokumentesmietinkasso', $foreignEntity); + } + + } catch (\Exception $e) { + $GLOBALS['log']->error('CAdvowareAkten 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); + } + } +} diff --git a/custom/Espo/Custom/Hooks/CMietinkasso/PropagateDocuments.php b/custom/Espo/Custom/Hooks/CMietinkasso/PropagateDocuments.php new file mode 100644 index 00000000..166b0eaf --- /dev/null +++ b/custom/Espo/Custom/Hooks/CMietinkasso/PropagateDocuments.php @@ -0,0 +1,154 @@ +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); + } + } +} diff --git a/custom/Espo/Custom/Hooks/CVmhRumungsklage/PropagateDocuments.php b/custom/Espo/Custom/Hooks/CVmhRumungsklage/PropagateDocuments.php new file mode 100644 index 00000000..b4e5097f --- /dev/null +++ b/custom/Espo/Custom/Hooks/CVmhRumungsklage/PropagateDocuments.php @@ -0,0 +1,154 @@ +getId() . '-' . $foreignEntity->getId() . '-relate'; + if (isset(self::$processing[$key])) { + return; + } + self::$processing[$key] = true; + + try { + // Hole verbundene AdvowareAkten + $advowareAkten = $this->entityManager + ->getRDBRepository('CVmhRumungsklage') + ->getRelation($entity, 'advowareAkten') + ->findOne(); + + // Verknüpfe Dokument mit AdvowareAkten + if ($advowareAkten) { + $this->relateDocument($advowareAkten, 'dokumentes', $foreignEntity); + } + + // Hole verbundene AIKnowledge + $aIKnowledge = $this->entityManager + ->getRDBRepository('CVmhRumungsklage') + ->getRelation($entity, 'aIKnowledge') + ->findOne(); + + // Verknüpfe Dokument mit AIKnowledge + if ($aIKnowledge) { + $this->relateDocument($aIKnowledge, 'dokumentes', $foreignEntity); + } + + } catch (\Exception $e) { + $GLOBALS['log']->error('CVmhRumungsklage 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 dokumentesvmhraumungsklage-Beziehung + if ($relationName !== 'dokumentesvmhraumungsklage') { + 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('CVmhRumungsklage') + ->getRelation($entity, 'advowareAkten') + ->findOne(); + + // Entknüpfe Dokument von AdvowareAkten + if ($advowareAkten) { + $this->unrelateDocument($advowareAkten, 'dokumentes', $foreignEntity); + } + + // Hole verbundene AIKnowledge + $aIKnowledge = $this->entityManager + ->getRDBRepository('CVmhRumungsklage') + ->getRelation($entity, 'aIKnowledge') + ->findOne(); + + // Entknüpfe Dokument von AIKnowledge + if ($aIKnowledge) { + $this->unrelateDocument($aIKnowledge, 'dokumentes', $foreignEntity); + } + + } catch (\Exception $e) { + $GLOBALS['log']->error('CVmhRumungsklage 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); + } + } +} diff --git a/data/config.php b/data/config.php index e543a46b..b843a4ed 100644 --- a/data/config.php +++ b/data/config.php @@ -360,7 +360,7 @@ return [ 0 => 'youtube.com', 1 => 'google.com' ], - 'microtime' => 1773255038.319449, + 'microtime' => 1773256040.239404, 'siteUrl' => 'https://crm.bitbylaw.com', 'fullTextSearchMinLength' => 4, 'webSocketUrl' => 'ws://api.bitbylaw.com:5000/espocrm/ws', diff --git a/data/state.php b/data/state.php index d4d116f5..5f7e0338 100644 --- a/data/state.php +++ b/data/state.php @@ -1,7 +1,7 @@ 1773255038, - 'microtimeState' => 1773255038.505417, + 'cacheTimestamp' => 1773256040, + 'microtimeState' => 1773256040.3679, 'currencyRates' => [ 'EUR' => 1.0 ],