Update timestamps in config and state files; add hooks for document relation propagation in CAIKnowledge, CAdvowareAkten, CMietinkasso, and CVmhRumungsklage
This commit is contained in:
155
custom/Espo/Custom/Hooks/CAIKnowledge/PropagateDocumentsUp.php
Normal file
155
custom/Espo/Custom/Hooks/CAIKnowledge/PropagateDocumentsUp.php
Normal file
@@ -0,0 +1,155 @@
|
||||
<?php
|
||||
namespace Espo\Custom\Hooks\CAIKnowledge;
|
||||
|
||||
use Espo\ORM\Entity;
|
||||
use Espo\Core\Hook\Hook\AfterRelate;
|
||||
use Espo\Core\Hook\Hook\AfterUnrelate;
|
||||
|
||||
/**
|
||||
* Hook: Propagiert Dokumenten-Verknüpfungen von AIKnowledge nach oben zu Räumungsklage/Mietinkasso
|
||||
*
|
||||
* Wenn Dokument mit AIKnowledge verknüpft wird:
|
||||
* → verknüpfe mit verbundener Räumungsklage/Mietinkasso
|
||||
* → von dort propagiert es automatisch zu AdvowareAkten (via deren Hooks)
|
||||
*
|
||||
* Wenn Dokument von AIKnowledge entknüpft wird:
|
||||
* → entknüpfe von verbundener Räumungsklage/Mietinkasso
|
||||
* → von dort propagiert es automatisch von AdvowareAkten (via deren Hooks)
|
||||
*/
|
||||
class PropagateDocumentsUp implements AfterRelate, AfterUnrelate
|
||||
{
|
||||
private static array $processing = [];
|
||||
|
||||
public function __construct(
|
||||
private \Espo\ORM\EntityManager $entityManager
|
||||
) {}
|
||||
|
||||
public function afterRelate(
|
||||
Entity $entity,
|
||||
string $relationName,
|
||||
Entity $foreignEntity,
|
||||
array $columnData,
|
||||
\Espo\ORM\Repository\Option\RelateOptions $options
|
||||
): void {
|
||||
// Nur für dokumentes-Beziehung
|
||||
if ($relationName !== 'dokumentes') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Vermeide Loops
|
||||
$key = $entity->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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user