From cb3da686735b3c9f87ea40eb5b2c4e9247dd54e9 Mon Sep 17 00:00:00 2001 From: bsiggel Date: Mon, 23 Mar 2026 21:41:01 +0100 Subject: [PATCH] Refactor CreateAdvowareAkte and SyncAdvowareAkte to synchronize only Aktennummer; update localization keys for advowareAktenzeichen; adjust microtime values in config and state files --- .../Hooks/CKuendigung/CreateAdvowareAkte.php | 30 +++++++------------ .../Hooks/CKuendigung/SyncAdvowareAkte.php | 12 ++------ .../Resources/i18n/de_DE/CKuendigung.json | 3 +- .../Resources/i18n/en_US/CKuendigung.json | 3 +- .../Resources/layouts/CKuendigung/detail.json | 2 +- .../metadata/entityDefs/CKuendigung.json | 14 +-------- .../Espo/Custom/Services/CVmhRumungsklage.php | 16 ++++------ data/config.php | 2 +- data/state.php | 4 +-- 9 files changed, 24 insertions(+), 62 deletions(-) diff --git a/custom/Espo/Custom/Hooks/CKuendigung/CreateAdvowareAkte.php b/custom/Espo/Custom/Hooks/CKuendigung/CreateAdvowareAkte.php index 8696922b..663458cb 100644 --- a/custom/Espo/Custom/Hooks/CKuendigung/CreateAdvowareAkte.php +++ b/custom/Espo/Custom/Hooks/CKuendigung/CreateAdvowareAkte.php @@ -83,17 +83,14 @@ class CreateAdvowareAkte implements AfterSave private function createNewAkte(Entity $kuendigung): void { - // Hole oder generiere Aktennummer + // Hole Aktennummer aus Kündigung (falls vorhanden) $aktennummer = $kuendigung->get('aktennr'); if (!$aktennummer) { $aktennummer = time(); } - // Hole oder generiere Aktenzeichen - $aktenzeichen = $kuendigung->get('advowareAktenzeichen'); - if (!$aktenzeichen) { - $aktenzeichen = 'AZ-' . date('Y-m-d-His'); - } + // Generiere Aktenzeichen (wird in CAdvowareAkten gespeichert) + $aktenzeichen = 'AZ-' . date('Y-m-d-His'); // Erstelle AdvowareAkte $akteData = [ @@ -117,8 +114,11 @@ class CreateAdvowareAkte implements AfterSave $kuendigung->set('advowareAktenId', $akte->getId()); $this->entityManager->saveEntity($kuendigung, ['silent' => true, 'skipHooks' => true]); - // Synchronisiere Aktennummer zurück zur Kündigung - $this->syncAktennummer($kuendigung, $akte); + // Synchronisiere Aktennummer zurück zur Kündigung (falls leer war) + if (!$kuendigung->get('aktennr') && $akte->get('aktennummer')) { + $kuendigung->set('aktennr', $akte->get('aktennummer')); + $this->entityManager->saveEntity($kuendigung, ['silent' => true, 'skipHooks' => true]); + } $GLOBALS['log']->info("CKuendigung CreateAdvowareAkte: Created new AdvowareAkte: {$akte->getId()}"); } else { @@ -128,21 +128,11 @@ class CreateAdvowareAkte implements AfterSave private function syncAktennummer(Entity $kuendigung, Entity $akte): void { - $needsUpdate = false; - + // Synchronisiere nur Aktennummer (nicht Aktenzeichen, das ist in der Beziehung) if (!$kuendigung->get('aktennr') && $akte->get('aktennummer')) { $kuendigung->set('aktennr', $akte->get('aktennummer')); - $needsUpdate = true; - } - - if (!$kuendigung->get('advowareAktenzeichen') && $akte->get('aktenzeichen')) { - $kuendigung->set('advowareAktenzeichen', $akte->get('aktenzeichen')); - $needsUpdate = true; - } - - if ($needsUpdate) { $this->entityManager->saveEntity($kuendigung, ['silent' => true, 'skipHooks' => true]); - $GLOBALS['log']->info("CKuendigung CreateAdvowareAkte: Synchronized Aktennummer/Aktenzeichen"); + $GLOBALS['log']->info("CKuendigung CreateAdvowareAkte: Synchronized Aktennummer"); } } } diff --git a/custom/Espo/Custom/Hooks/CKuendigung/SyncAdvowareAkte.php b/custom/Espo/Custom/Hooks/CKuendigung/SyncAdvowareAkte.php index 72a6cf72..3009cfa2 100644 --- a/custom/Espo/Custom/Hooks/CKuendigung/SyncAdvowareAkte.php +++ b/custom/Espo/Custom/Hooks/CKuendigung/SyncAdvowareAkte.php @@ -62,22 +62,14 @@ class SyncAdvowareAkte implements AfterRelate // Verknüpfe AdvowareAkte mit Kündigung (belongsTo relationship - set field directly) $entity->set('advowareAktenId', $advowareAkteId); - // Synchronisiere Aktennummer und Aktenzeichen - $needsUpdate = false; - + // Synchronisiere nur Aktennummer (Aktenzeichen kommt über Beziehung) if (!$entity->get('aktennr') && $advowareAkte->get('aktennummer')) { $entity->set('aktennr', $advowareAkte->get('aktennummer')); - $needsUpdate = true; - } - - if (!$entity->get('advowareAktenzeichen') && $advowareAkte->get('aktenzeichen')) { - $entity->set('advowareAktenzeichen', $advowareAkte->get('aktenzeichen')); - $needsUpdate = true; } // Save once with all changes $this->entityManager->saveEntity($entity, ['silent' => true, 'skipHooks' => true]); - $GLOBALS['log']->info("CKuendigung SyncAdvowareAkte: Successfully linked AdvowareAkte and synchronized fields to Kündigung"); + $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"); diff --git a/custom/Espo/Custom/Resources/i18n/de_DE/CKuendigung.json b/custom/Espo/Custom/Resources/i18n/de_DE/CKuendigung.json index 3496e843..240dbad1 100644 --- a/custom/Espo/Custom/Resources/i18n/de_DE/CKuendigung.json +++ b/custom/Espo/Custom/Resources/i18n/de_DE/CKuendigung.json @@ -34,7 +34,7 @@ "modifiedBy": "Geändert von", "freigeschalteteNutzer": "Freigeschaltete Nutzer", "collaborators": "Mitarbeiter", - "advowareAktenzeichen": "Advoware Aktenzeichen", + "advowareAkten": "Advoware Akte", "aktennr": "Advoware Identifikator", "advowareLastSync": "Letzter Sync", "syncStatus": "Sync Status", @@ -106,7 +106,6 @@ } }, "tooltips": { - "advowareAktenzeichen": "Aktenzeichen aus Advoware für die Synchronisation", "aktennr": "Eindeutige Kündigungs-Nummer aus Advoware", "syncStatus": "Status der Advoware-Synchronisation: pending_sync = Warte auf Sync, clean = erfolgreich synchronisiert, unclean = Änderungen ausstehend, failed = Fehler, no_sync = Nicht synchronisiert", "sendungsverfolgungsnummer": "Sendungsverfolgungsnummer für Einschreiben", diff --git a/custom/Espo/Custom/Resources/i18n/en_US/CKuendigung.json b/custom/Espo/Custom/Resources/i18n/en_US/CKuendigung.json index c7e45305..b5cc4051 100644 --- a/custom/Espo/Custom/Resources/i18n/en_US/CKuendigung.json +++ b/custom/Espo/Custom/Resources/i18n/en_US/CKuendigung.json @@ -9,7 +9,7 @@ "modifiedBy": "Modified By", "freigeschalteteNutzer": "Authorized Users", "collaborators": "Collaborators", - "advowareAktenzeichen": "Advoware File Number", + "advowareAkten": "Advoware File", "aktennr": "Case Number", "advowareLastSync": "Last Sync", "syncStatus": "Sync Status", @@ -105,7 +105,6 @@ } }, "tooltips": { - "advowareAktenzeichen": "File number from Advoware for synchronization", "aktennr": "Case number from Advoware", "syncStatus": "Advoware synchronization status: pending_sync = Waiting for sync, clean = successfully synchronized, unclean = changes pending, failed = error, no_sync = Not synchronized", "sendungsverfolgungsnummer": "Tracking number for registered mail", diff --git a/custom/Espo/Custom/Resources/layouts/CKuendigung/detail.json b/custom/Espo/Custom/Resources/layouts/CKuendigung/detail.json index a83abbbd..f4ab0014 100644 --- a/custom/Espo/Custom/Resources/layouts/CKuendigung/detail.json +++ b/custom/Espo/Custom/Resources/layouts/CKuendigung/detail.json @@ -15,7 +15,7 @@ "name": "status" }, { - "name": "advowareAktenzeichen" + "name": "advowareAkten" } ], [ diff --git a/custom/Espo/Custom/Resources/metadata/entityDefs/CKuendigung.json b/custom/Espo/Custom/Resources/metadata/entityDefs/CKuendigung.json index bf59395b..9f11033c 100644 --- a/custom/Espo/Custom/Resources/metadata/entityDefs/CKuendigung.json +++ b/custom/Espo/Custom/Resources/metadata/entityDefs/CKuendigung.json @@ -52,14 +52,6 @@ "tooltipText" ] }, - "advowareAktenzeichen": { - "type": "varchar", - "required": false, - "maxLength": 100, - "tooltip": true, - "isCustom": true, - "copyToClipboard": true - }, "aktennr": { "type": "int", "required": false, @@ -421,11 +413,7 @@ "aktennr" ] }, - "advowareAktenzeichen": { - "columns": [ - "advowareAktenzeichen" - ] - }, + "status": { "columns": [ "status", diff --git a/custom/Espo/Custom/Services/CVmhRumungsklage.php b/custom/Espo/Custom/Services/CVmhRumungsklage.php index ca6a82df..755ba6df 100644 --- a/custom/Espo/Custom/Services/CVmhRumungsklage.php +++ b/custom/Espo/Custom/Services/CVmhRumungsklage.php @@ -428,19 +428,13 @@ class CVmhRumungsklage extends \Espo\Services\Record // 2. If no existing Akte found, create new one if (!$advowareAkte) { - // Collect Aktennummer and Aktenzeichen from Kündigungen + // Collect Aktennummer from Kündigungen (Aktenzeichen wird neu generiert) $aktennummer = null; - $aktenzeichen = null; foreach ($alleKuendigungen as $kuendigung) { if (!$aktennummer && $kuendigung->get('aktennr')) { $aktennummer = $kuendigung->get('aktennr'); - } - if (!$aktenzeichen && $kuendigung->get('advowareAktenzeichen')) { - $aktenzeichen = $kuendigung->get('advowareAktenzeichen'); - } - if ($aktennummer && $aktenzeichen) { - break; // Found both + break; // Use first found } } @@ -448,9 +442,9 @@ class CVmhRumungsklage extends \Espo\Services\Record if (!$aktennummer) { $aktennummer = time(); // Simple timestamp-based generation } - if (!$aktenzeichen) { - $aktenzeichen = 'AZ-' . date('Y-m-d-His'); - } + + // Always generate new Aktenzeichen + $aktenzeichen = 'AZ-' . date('Y-m-d-His'); // Create new AdvowareAkte $advowareAkteData = [ diff --git a/data/config.php b/data/config.php index 93614c85..48941b2d 100644 --- a/data/config.php +++ b/data/config.php @@ -360,7 +360,7 @@ return [ 0 => 'youtube.com', 1 => 'google.com' ], - 'microtime' => 1774297547.393199, + 'microtime' => 1774298143.136788, '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 2432817c..e5fedf05 100644 --- a/data/state.php +++ b/data/state.php @@ -1,7 +1,7 @@ 1774297547, - 'microtimeState' => 1774297547.570899, + 'cacheTimestamp' => 1774298143, + 'microtimeState' => 1774298143.319113, 'currencyRates' => [ 'EUR' => 1.0 ],