get('skipHooks')) { return; } // Nur wenn Entity bereits existiert (nicht bei Create) if ($entity->isNew()) { return; } try { // Hole das neueste lastSyncTimestamp aller verknüpften Dokumente $query = $this->entityManager->getQueryBuilder() ->select([ 'MAX:lastSyncTimestamp' => 'maxLastSync', 'COUNT:id' => 'dokumentCount' ]) ->from('CDokumente') ->where([ 'cAdvowareAktenId' => $entity->getId(), 'deleted' => false, 'lastSyncTimestamp!=' => null ]) ->build(); $pdoStatement = $this->entityManager->getQueryExecutor()->execute($query); $result = $pdoStatement->fetch(\PDO::FETCH_ASSOC); if ($result && $result['maxLastSync']) { // Setze lastSync auf den neuesten Sync-Timestamp $entity->set('lastSync', $result['maxLastSync']); } // Berechne auch syncStatus basierend auf verknüpften Dokumenten $this->updateSyncStatus($entity); } catch (\Exception $e) { // Fehler loggen, aber nicht werfen (um Save nicht zu blockieren) $GLOBALS['log']->error('CAdvowareAkten UpdateLastSyncFromDocuments Hook Error: ' . $e->getMessage()); } } /** * Aktualisiert syncStatus basierend auf den Status der verknüpften Dokumente */ private function updateSyncStatus(Entity $entity): void { $query = $this->entityManager->getQueryBuilder() ->select(['syncStatus']) ->from('CDokumente') ->where([ 'cAdvowareAktenId' => $entity->getId(), 'deleted' => false ]) ->build(); $pdoStatement = $this->entityManager->getQueryExecutor()->execute($query); $rows = $pdoStatement->fetchAll(\PDO::FETCH_ASSOC); // Wenn keine Dokumente verknüpft, setze auf "unclean" if (empty($rows)) { $entity->set('syncStatus', 'unclean'); return; } // Prüfe, ob irgendein Dokument "new" oder "unclean" ist $hasUnsynced = false; $hasFailed = false; foreach ($rows as $row) { $status = $row['syncStatus'] ?? null; if ($status === 'failed') { $hasFailed = true; } if ($status === 'new' || $status === 'unclean' || $status === null || $status === '') { $hasUnsynced = true; } } // Setze globalen Status if ($hasFailed) { $entity->set('syncStatus', 'failed'); } elseif ($hasUnsynced) { $entity->set('syncStatus', 'unclean'); } else { // Alle Dokumente sind "synced" $entity->set('syncStatus', 'synced'); } } }