85 lines
3.6 KiB
PHP
85 lines
3.6 KiB
PHP
<?php
|
|
namespace Espo\Custom\Hooks\CKuendigung;
|
|
|
|
use Espo\ORM\Entity;
|
|
use Espo\Core\Hook\Hook\AfterRelate;
|
|
|
|
/**
|
|
* Hook: Synchronisiert AdvowareAkte zwischen Kündigung und Räumungsklage
|
|
*
|
|
* Wenn eine Kündigung mit einer Räumungsklage verknüpft wird:
|
|
* - Prüfe ob Räumungsklage eine AdvowareAkte hat
|
|
* - Wenn ja, verknüpfe diese Akte auch mit der Kündigung
|
|
* - Übernehme/Synchronisiere Aktennummer und Aktenzeichen
|
|
*/
|
|
class SyncAdvowareAkte implements AfterRelate
|
|
{
|
|
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 vmhRumungsklages-Beziehung (wenn Räumungsklage zu Kündigung hinzugefügt wird)
|
|
if ($relationName !== 'vmhRumungsklages') {
|
|
return;
|
|
}
|
|
|
|
// Vermeide Loops
|
|
$key = $entity->getId() . '-' . $foreignEntity->getId() . '-sync-akte';
|
|
if (isset(self::$processing[$key])) {
|
|
return;
|
|
}
|
|
self::$processing[$key] = true;
|
|
|
|
try {
|
|
// $entity = CKuendigung
|
|
// $foreignEntity = CVmhRumungsklage
|
|
|
|
// Hole AdvowareAkte von der Räumungsklage (hasOne relationship - get via field)
|
|
$advowareAkteId = $foreignEntity->get('advowareAktenId');
|
|
|
|
if ($advowareAkteId) {
|
|
$advowareAkte = $this->entityManager->getEntity('CAdvowareAkten', $advowareAkteId);
|
|
|
|
if ($advowareAkte) {
|
|
$GLOBALS['log']->info("CKuendigung SyncAdvowareAkte: Found AdvowareAkte {$advowareAkte->getId()} on Räumungsklage {$foreignEntity->getId()}");
|
|
|
|
// Prüfe ob Kündigung bereits eine andere Akte hat
|
|
$existingAktenId = $entity->get('advowareAktenId');
|
|
|
|
if ($existingAktenId && $existingAktenId !== $advowareAkteId) {
|
|
$GLOBALS['log']->warning("CKuendigung SyncAdvowareAkte: Kündigung already has different AdvowareAkte {$existingAktenId}, will replace with {$advowareAkteId}");
|
|
}
|
|
|
|
// Verknüpfe AdvowareAkte mit Kündigung (belongsTo relationship - set field directly)
|
|
$entity->set('advowareAktenId', $advowareAkteId);
|
|
|
|
// Synchronisiere nur Aktennummer (Aktenzeichen kommt über Beziehung)
|
|
if (!$entity->get('aktennr') && $advowareAkte->get('aktennummer')) {
|
|
$entity->set('aktennr', $advowareAkte->get('aktennummer'));
|
|
}
|
|
|
|
// Save once with all changes
|
|
$this->entityManager->saveEntity($entity, ['silent' => true, 'skipHooks' => true]);
|
|
$GLOBALS['log']->info("CKuendigung SyncAdvowareAkte: Successfully linked AdvowareAkte and synchronized Aktennummer to Kündigung");
|
|
}
|
|
} else {
|
|
$GLOBALS['log']->info("CKuendigung SyncAdvowareAkte: Räumungsklage {$foreignEntity->getId()} has no AdvowareAkte yet");
|
|
}
|
|
|
|
} catch (\Exception $e) {
|
|
$GLOBALS['log']->error('CKuendigung SyncAdvowareAkte Error: ' . $e->getMessage());
|
|
} finally {
|
|
unset(self::$processing[$key]);
|
|
}
|
|
}
|
|
}
|