76 lines
2.8 KiB
PHP
76 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace Espo\Custom\Hooks\CKndigung;
|
|
|
|
use Espo\Core\Hook\Hook\AfterRelate;
|
|
use Espo\Core\Hook\Hook\AfterUnrelate;
|
|
use Espo\ORM\Entity;
|
|
use Espo\ORM\Repository\Option\RelateOptions;
|
|
use Espo\ORM\Repository\Option\UnrelateOptions;
|
|
|
|
/**
|
|
* Hook for synchronizing documents bidirectionally between Kündigung and Mietverhältnis
|
|
* When documents are added to Kündigung, they should also be linked to the related Mietverhältnis
|
|
*/
|
|
class DocumentSync implements AfterRelate, AfterUnrelate
|
|
{
|
|
public function __construct()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* After a document is related to Kündigung, also relate it to the linked Mietverhältnis
|
|
*/
|
|
public function afterRelate(Entity $entity, string $relationName, Entity $foreignEntity, RelateOptions $options): void
|
|
{
|
|
// Only process when relating documents to Kündigung
|
|
if ($relationName !== 'dokumenteskuendigung') {
|
|
return;
|
|
}
|
|
|
|
// Get the related Mietverhältnis
|
|
$mietverhältnisList = $entity->getLinkMultipleIdList('vmhMietverhltnises');
|
|
if (empty($mietverhältnisList)) {
|
|
return;
|
|
}
|
|
|
|
// Get EntityManager from entity
|
|
$entityManager = $entity->getEntityManager();
|
|
|
|
// Link the document to the Mietverhältnis
|
|
foreach ($mietverhältnisList as $mietverhältnisId) {
|
|
$mietverhältnis = $entityManager->getEntityById('CVmhMietverhltnis', $mietverhältnisId);
|
|
if (!$mietverhältnis) {
|
|
continue;
|
|
}
|
|
|
|
// Link document to Mietverhältnis if not already linked
|
|
$repository = $entityManager->getRDBRepositoryByClass('CVmhMietverhltnis');
|
|
$isRelated = $repository->getRelation($mietverhältnis, 'dokumentesvmhMietverhltnisse')
|
|
->isRelatedById($foreignEntity->getId());
|
|
|
|
if (!$isRelated) {
|
|
$repository->getRelation($mietverhältnis, 'dokumentesvmhMietverhltnisse')
|
|
->relateById($foreignEntity->getId());
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* After a document is unrelated from Kündigung, optionally unrelate from Mietverhältnis
|
|
* Note: We don't automatically unrelate from Mietverhältnis because the document might
|
|
* have been added to Mietverhältnis independently
|
|
*/
|
|
public function afterUnrelate(Entity $entity, string $relationName, Entity $foreignEntity, UnrelateOptions $options): void
|
|
{
|
|
// Only process when unrelating documents from Kündigung
|
|
if ($relationName !== 'dokumenteskuendigung') {
|
|
return;
|
|
}
|
|
|
|
// Note: We intentionally do NOT remove documents from Mietverhältnis
|
|
// because they might have been added there independently.
|
|
// Users must manually remove documents from Mietverhältnis if needed.
|
|
}
|
|
}
|