Add localization files and layout configurations for CAkten and related entities

- Created localization JSON files for multiple languages (e.g., Danish, German, Greek, English, Spanish, etc.) for CAkten and CAktenCDokumente.
- Added layout configurations for CAkten, including detail views, side panels, and bottom panels.
- Implemented metadata definitions for CAkten, including field definitions, relationship panels, and scopes.
- Introduced new JSON files for managing document relationships and listing configurations.
This commit is contained in:
2026-03-26 01:56:22 +01:00
parent 661943987f
commit 6ac852b42a
85 changed files with 1387 additions and 276 deletions

View File

@@ -0,0 +1,7 @@
<?php
namespace Espo\Custom\Controllers;
class CAkten extends \Espo\Core\Templates\Controllers\BasePlus
{
}

View File

@@ -0,0 +1,21 @@
<?php
namespace Espo\Custom\Controllers;
use Espo\Core\Controllers\Record;
/**
* Junction Controller: CAkten ↔ CDokumente
*
* Provides REST API access to the Akten-Dokumente relationship.
*
* Available endpoints:
* GET /api/v1/CAktenCDokumente
* GET /api/v1/CAktenCDokumente/{id}
* POST /api/v1/CAktenCDokumente
* PUT /api/v1/CAktenCDokumente/{id}
* DELETE /api/v1/CAktenCDokumente/{id}
*/
class CAktenCDokumente extends Record
{
// Inherits all CRUD operations from Record controller
}

View File

@@ -59,8 +59,8 @@ class PropagateDocumentsUp implements AfterRelate, AfterUnrelate
->getRelation($raumungsklage, 'advowareAkten')
->findOne();
if ($advowareAkte && !$foreignEntity->get('cAdvowareAktenId')) {
$foreignEntity->set('cAdvowareAktenId', $advowareAkte->getId());
if ($advowareAkte && !$foreignEntity->get('cAktenId')) {
$foreignEntity->set('cAktenId', $advowareAkte->getId());
$foreignEntity->set('syncStatus', 'new');
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
}
@@ -81,8 +81,8 @@ class PropagateDocumentsUp implements AfterRelate, AfterUnrelate
->getRelation($mietinkasso, 'advowareAkten')
->findOne();
if ($advowareAkte && !$foreignEntity->get('cAdvowareAktenId')) {
$foreignEntity->set('cAdvowareAktenId', $advowareAkte->getId());
if ($advowareAkte && !$foreignEntity->get('cAktenId')) {
$foreignEntity->set('cAktenId', $advowareAkte->getId());
$foreignEntity->set('syncStatus', 'new');
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
}
@@ -134,7 +134,7 @@ class PropagateDocumentsUp implements AfterRelate, AfterUnrelate
$this->unrelateDocument($mietinkasso, 'dokumentesmietinkasso', $foreignEntity);
}
// Note: We don't remove cAdvowareAktenId on unrelate from AIKnowledge
// Note: We don't remove cAktenId on unrelate from AIKnowledge
// because the document might still be linked to Räumungsklage/Mietinkasso
} catch (\Exception $e) {

View File

@@ -1,118 +0,0 @@
<?php
namespace Espo\Custom\Hooks\CAdvowareAkten;
use Espo\ORM\Entity;
use Espo\Core\Hook\Hook\AfterSave;
/**
* Hook: Propagiert Dokumenten-Änderungen von AdvowareAkten nach oben zu Räumungsklage/Mietinkasso
* und auch zu AICollection
*
* Wenn ein Dokument einer AdvowareAkte zugewiesen wird (via cAdvowareAktenId):
* → verknüpfe mit verbundener Räumungsklage/Mietinkasso
* → verknüpfe mit AICollection
*
* Improved logic: Works with direct belongsTo relationship (cAdvowareAktenId)
*/
class PropagateDocumentsUp implements AfterSave
{
private static array $processing = [];
public function __construct(
private \Espo\ORM\EntityManager $entityManager
) {}
public function afterSave(Entity $entity, \Espo\ORM\Repository\Option\SaveOptions $options): void
{
// Only process when cAdvowareAktenId changed
if (!$entity->isAttributeChanged('cAdvowareAktenId')) {
return;
}
$akteId = $entity->get('cAdvowareAktenId');
if (!$akteId) {
return; // Document was unlinked from Akte
}
// Vermeide Loops
$key = $akteId . '-' . $entity->getId() . '-propagate';
if (isset(self::$processing[$key])) {
return;
}
self::$processing[$key] = true;
try {
// Load AdvowareAkte
$akte = $this->entityManager->getEntity('CAdvowareAkten', $akteId);
if (!$akte) {
return;
}
// Prüfe ob Räumungsklage verknüpft ist
$raumungsklage = $this->entityManager
->getRDBRepository('CAdvowareAkten')
->getRelation($akte, 'vmhRumungsklage')
->findOne();
if ($raumungsklage) {
$this->relateDocument($raumungsklage, 'dokumentesvmhraumungsklage', $entity);
}
// Prüfe ob Mietinkasso verknüpft ist
$mietinkasso = $this->entityManager
->getRDBRepository('CAdvowareAkten')
->getRelation($akte, 'mietinkasso')
->findOne();
if ($mietinkasso) {
$this->relateDocument($mietinkasso, 'dokumentesmietinkasso', $entity);
}
// Also propagate to AICollection if Räumungsklage or Mietinkasso has one
if ($raumungsklage) {
$aiKnowledge = $this->entityManager
->getRDBRepository('CVmhRumungsklage')
->getRelation($raumungsklage, 'aIKnowledge')
->findOne();
if ($aiKnowledge) {
$this->relateDocument($aiKnowledge, 'dokumentes', $entity);
}
}
if ($mietinkasso) {
$aiKnowledge = $this->entityManager
->getRDBRepository('CMietinkasso')
->getRelation($mietinkasso, 'aIKnowledge')
->findOne();
if ($aiKnowledge) {
$this->relateDocument($aiKnowledge, 'dokumentes', $entity);
}
}
} catch (\Exception $e) {
$GLOBALS['log']->error('CAdvowareAkten PropagateDocumentsUp 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);
}
}
}

View File

@@ -0,0 +1,83 @@
<?php
namespace Espo\Custom\Hooks\CAkten;
use Espo\ORM\Entity;
use Espo\Core\Hook\Hook\AfterSave;
/**
* Hook: Propagiert Dokumenten-Änderungen von Akten nach oben zu Räumungsklage/Mietinkasso
*
* Wenn ein Dokument einer Akte zugewiesen wird (via cAktenId):
* → verknüpfe mit verbundener Räumungsklage/Mietinkasso
*/
class PropagateDocumentsUp implements AfterSave
{
private static array $processing = [];
public function __construct(
private \Espo\ORM\EntityManager $entityManager
) {}
public function afterSave(Entity $entity, \Espo\ORM\Repository\Option\SaveOptions $options): void
{
// Only process when cAktenId changed
if (!$entity->isAttributeChanged('cAktenId')) {
return;
}
$akteId = $entity->get('cAktenId');
if (!$akteId) {
return;
}
$key = $akteId . '-' . $entity->getId() . '-propagate';
if (isset(self::$processing[$key])) {
return;
}
self::$processing[$key] = true;
try {
$akte = $this->entityManager->getEntity('CAkten', $akteId);
if (!$akte) {
return;
}
$raumungsklage = $this->entityManager
->getRDBRepository('CAkten')
->getRelation($akte, 'vmhRumungsklage')
->findOne();
if ($raumungsklage) {
$this->relateDocument($raumungsklage, 'dokumentesvmhraumungsklage', $entity);
}
$mietinkasso = $this->entityManager
->getRDBRepository('CAkten')
->getRelation($akte, 'mietinkasso')
->findOne();
if ($mietinkasso) {
$this->relateDocument($mietinkasso, 'dokumentesmietinkasso', $entity);
}
} catch (\Exception $e) {
$GLOBALS['log']->error('CAkten PropagateDocumentsUp Error: ' . $e->getMessage());
} finally {
unset(self::$processing[$key]);
}
}
private function relateDocument(Entity $parentEntity, string $relationName, Entity $document): void
{
$repository = $this->entityManager->getRDBRepository($parentEntity->getEntityType());
$relation = $repository->getRelation($parentEntity, $relationName);
$isRelated = $relation
->where(['id' => $document->getId()])
->findOne();
if (!$isRelated) {
$relation->relate($document);
}
}
}

View File

@@ -1,5 +1,5 @@
<?php
namespace Espo\Custom\Hooks\CAdvowareAkten;
namespace Espo\Custom\Hooks\CAkten;
use Espo\ORM\Entity;
use Espo\ORM\Repository\Option\SaveOptions;
@@ -36,7 +36,7 @@ class UpdateLastSyncFromDocuments implements BeforeSave
])
->from('CDokumente')
->where([
'cAdvowareAktenId' => $entity->getId(),
'cAktenId' => $entity->getId(),
'deleted' => false,
'lastSyncTimestamp!=' => null
])
@@ -55,7 +55,7 @@ class UpdateLastSyncFromDocuments implements BeforeSave
} catch (\Exception $e) {
// Fehler loggen, aber nicht werfen (um Save nicht zu blockieren)
$GLOBALS['log']->error('CAdvowareAkten UpdateLastSyncFromDocuments Hook Error: ' . $e->getMessage());
$GLOBALS['log']->error('CAkten UpdateLastSyncFromDocuments Hook Error: ' . $e->getMessage());
}
}
@@ -68,7 +68,7 @@ class UpdateLastSyncFromDocuments implements BeforeSave
->select(['syncStatus'])
->from('CDokumente')
->where([
'cAdvowareAktenId' => $entity->getId(),
'cAktenId' => $entity->getId(),
'deleted' => false
])
->build();

View File

@@ -30,12 +30,12 @@ class UpdateJunctionSyncStatus implements AfterSave
try {
// Set syncStatus = 'unclean' directly on CDokumente entity
// (only if it has an AdvowareAkte linked)
if ($entity->get('cAdvowareAktenId')) {
if ($entity->get('cAktenId')) {
$entity->set('syncStatus', 'unclean');
$this->entityManager->saveEntity($entity, ['silent' => true, 'skipHooks' => true]);
// Trigger parent AdvowareAkte update (will update syncStatus and lastSync via its own hook)
$akte = $this->entityManager->getEntityById('CAdvowareAkten', $entity->get('cAdvowareAktenId'));
$akte = $this->entityManager->getEntityById('CAkten', $entity->get('cAktenId'));
if ($akte) {
// Just touch the entity to trigger beforeSave hook
$this->entityManager->saveEntity($akte, ['silent' => true]);

View File

@@ -60,7 +60,7 @@ class CreateAdvowareAkte implements AfterSave
$this->entityManager->saveEntity($entity, ['silent' => true, 'skipHooks' => true]);
// Synchronisiere Aktennummer
$akte = $this->entityManager->getEntity('CAdvowareAkten', $rkAkteId);
$akte = $this->entityManager->getEntity('CAkten', $rkAkteId);
if ($akte) {
$this->syncAktennummer($entity, $akte);
}
@@ -103,7 +103,7 @@ class CreateAdvowareAkte implements AfterSave
$akteData['teamsIds'] = $teamsIds;
}
$akte = $this->entityManager->createEntity('CAdvowareAkten', $akteData);
$akte = $this->entityManager->createEntity('CAkten', $akteData);
if ($akte) {
// Verknüpfe mit Kündigung

View File

@@ -47,7 +47,7 @@ class SyncAdvowareAkte implements AfterRelate
$advowareAkteId = $foreignEntity->get('advowareAktenId');
if ($advowareAkteId) {
$advowareAkte = $this->entityManager->getEntity('CAdvowareAkten', $advowareAkteId);
$advowareAkte = $this->entityManager->getEntity('CAkten', $advowareAkteId);
if ($advowareAkte) {
$GLOBALS['log']->info("CKuendigung SyncAdvowareAkte: Found AdvowareAkte {$advowareAkte->getId()} on Räumungsklage {$foreignEntity->getId()}");

View File

@@ -47,7 +47,7 @@ class PropagateDocuments implements AfterRelate, AfterUnrelate
// Set direct belongsTo relationship on document
if ($advowareAkten) {
$foreignEntity->set('cAdvowareAktenId', $advowareAkten->getId());
$foreignEntity->set('cAktenId', $advowareAkten->getId());
$foreignEntity->set('syncStatus', 'new'); // Mark as new for Advoware sync
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
}
@@ -96,8 +96,8 @@ class PropagateDocuments implements AfterRelate, AfterUnrelate
->findOne();
// Remove direct belongsTo relationship from document
if ($advowareAkten && $foreignEntity->get('cAdvowareAktenId') === $advowareAkten->getId()) {
$foreignEntity->set('cAdvowareAktenId', null);
if ($advowareAkten && $foreignEntity->get('cAktenId') === $advowareAkten->getId()) {
$foreignEntity->set('cAktenId', null);
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
}

View File

@@ -47,7 +47,7 @@ class PropagateDocuments implements AfterRelate, AfterUnrelate
// Set direct belongsTo relationship on document
if ($advowareAkten) {
$foreignEntity->set('cAdvowareAktenId', $advowareAkten->getId());
$foreignEntity->set('cAktenId', $advowareAkten->getId());
$foreignEntity->set('syncStatus', 'new'); // Mark as new for Advoware sync
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
}
@@ -96,8 +96,8 @@ class PropagateDocuments implements AfterRelate, AfterUnrelate
->findOne();
// Remove direct belongsTo relationship from document
if ($advowareAkten && $foreignEntity->get('cAdvowareAktenId') === $advowareAkten->getId()) {
$foreignEntity->set('cAdvowareAktenId', null);
if ($advowareAkten && $foreignEntity->get('cAktenId') === $advowareAkten->getId()) {
$foreignEntity->set('cAktenId', null);
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "الاجتماعات",
"calls": "المكالمات",
"tasks": "مهام"
},
"labels": {
"Create CAkten": "إنشاء {الكيانTypeTranslated}"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Срещи",
"calls": "Разговори",
"tasks": "Задачи"
},
"labels": {
"Create CAkten": "Създаване на Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Schůzky",
"calls": "Hovory",
"tasks": "Úkoly"
},
"labels": {
"Create CAkten": "Vytvořit Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Møder",
"calls": "Opkald",
"tasks": "Opgaver"
},
"labels": {
"Create CAkten": "Opret Advoware Akten "
}
}

View File

@@ -1,9 +1,78 @@
{
"links": {
"calls": "Anrufe",
"tasks": "Aufgaben"
},
"labels": {
"Create CAkten": "Akten erstellen"
}
"links": {
"calls": "Anrufe",
"tasks": "Aufgaben",
"vmhRumungsklage": "Räumungsklagen",
"mietinkasso": "Mietinkasso",
"kuendigungen": "Kündigungen",
"dokumentes": "Dokumente"
},
"labels": {
"Create CAkten": "Erstellen Akten"
},
"fields": {
"vmhRumungsklage": "Räumungsklagen",
"mietinkasso": "Mietinkasso",
"aktenzeichen": "Aktenzeichen",
"aktennummer": "Aktennummer",
"syncStatus": "Advoware Sync-Status",
"lastSync": "Advoware Letzter Sync",
"aktivierungsstatus": "Advoware Aktivierungsstatus",
"aiCollectionId": "AI Collection-ID",
"aiAktivierungsstatus": "AI Aktivierungsstatus",
"aiSyncStatus": "AI Sync-Status",
"aiLastSync": "AI Letzter Sync",
"globalSyncStatus": "Globaler Sync-Status",
"globalLastSync": "Globaler letzter Sync",
"syncSchalter": "Sync aktiv",
"dokumentes": "Dokumente"
},
"options": {
"syncStatus": {
"synced": "Synchronisiert",
"unclean": "Nicht synchronisiert",
"pending_sync": "Synchronisierung ausstehend",
"failed": "Fehlgeschlagen"
},
"aktivierungsstatus": {
"new": "Neu",
"import": "Import",
"active": "Aktiv",
"paused": "Pausiert",
"deactivated": "Deaktiviert"
},
"aiAktivierungsstatus": {
"new": "Neu",
"import": "Import",
"active": "Aktiv",
"paused": "Pausiert",
"deactivated": "Deaktiviert"
},
"aiSyncStatus": {
"synced": "Synchronisiert",
"unclean": "Nicht synchronisiert",
"pending_sync": "Synchronisierung ausstehend",
"failed": "Fehlgeschlagen"
},
"globalSyncStatus": {
"synced": "Synchronisiert",
"unclean": "Nicht synchronisiert",
"pending_sync": "Synchronisierung ausstehend",
"failed": "Fehlgeschlagen"
}
},
"tooltips": {
"syncStatus": "Advoware-Synchronisationsstatus: synced = Alle Dokumente synchronisiert, unclean = Mindestens ein Dokument ist neu oder hat Änderungen, pending_sync = Synchronisierung ausstehend, failed = Fehlgeschlagen.",
"lastSync": "Zeitpunkt der letzten erfolgreichen Advoware-Synchronisation",
"aktivierungsstatus": "Advoware Aktivierungsstatus: new = Neu angelegt, import = Aus Advoware importiert, active = Aktiv synchronisiert, paused = Pausiert, deactivated = Deaktiviert",
"aiCollectionId": "Eindeutige ID der KI-Datenbank/Collection für diese Akte",
"aiAktivierungsstatus": "KI-Sync Aktivierungsstatus: new = Neu, import = Importiert, active = Aktiv synchronisiert, paused = Pausiert, deactivated = Deaktiviert",
"aiSyncStatus": "KI-Synchronisationsstatus: synced = Alle Dokumente synchronisiert, unclean = Änderungen vorhanden, pending_sync = Ausstehend, failed = Fehlgeschlagen",
"aiLastSync": "Zeitpunkt der letzten erfolgreichen KI-Synchronisation",
"advowareSyncEnabled": "Advoware-Synchronisation für diese Akte aktivieren oder deaktivieren",
"aiSyncEnabled": "KI-Synchronisation für diese Akte aktivieren oder deaktivieren",
"globalSyncStatus": "Übergreifender Sync-Status über alle Synchronisationssysteme",
"globalLastSync": "Zeitpunkt des letzten Sync-Vorgangs über alle Systeme",
"syncSchalter": "Globaler Sync-Schalter: aktiviert oder deaktiviert alle Synchronisationen für diese Akte"
}
}

View File

@@ -0,0 +1,33 @@
{
"labels": {
"Create CAktenCDokumente": "Advoware-Dokument-Verknüpfung erstellen",
"CAktenCDokumente": "Advoware-Dokument-Verknüpfungen"
},
"fields": {
"cAkten": "Akte",
"cAktenId": "Akten-ID",
"cDokumente": "Dokument",
"cDokumenteId": "Dokument ID",
"hnr": "HNR",
"syncStatus": "Sync-Status",
"syncedHash": "Sync-Hash",
"deleted": "Gelöscht"
},
"links": {
"cAkten": "Akte",
"cDokumente": "Dokument"
},
"options": {
"syncStatus": {
"new": "Neu",
"changed": "Geändert",
"synced": "Synchronisiert",
"deleted": "Gelöscht"
}
},
"tooltips": {
"hnr": "Advoware HNR Referenz für dieses Dokument",
"syncStatus": "Synchronisierungsstatus mit Advoware",
"syncedHash": "Hash-Wert des zuletzt synchronisierten Dokument-Zustands (zur Änderungserkennung)"
}
}

View File

@@ -3,15 +3,12 @@
"dokument": "Download",
"preview": "Vorschau",
"blake3hash": "Blake3-Hash",
"cAdvowareAkten": "Advoware Akte",
"cAdvowareAktenId": "Advoware Akten-ID",
"cAdvowareAktenName": "Advoware Aktenname",
"hnr": "HNR (Advoware)",
"syncStatus": "Sync-Status",
"syncedHash": "Sync-Hash",
"syncStatus": "Advoware Sync-Status",
"syncedHash": "Advoware Sync-Hash",
"usn": "USN",
"dateipfad": "Dateipfad",
"lastSyncTimestamp": "Letzter Sync",
"lastSyncTimestamp": "Advoware Letzter Sync",
"advowareArt": "Advoware Art",
"advowareBemerkung": "Advoware Bemerkung",
"contactsvmhdokumente": "Freigegebene Nutzer",
@@ -26,10 +23,17 @@
"aIKnowledges": "AI Knowledge",
"aiKnowledgeAiDocumentId": "AI Document ID",
"aiKnowledgeSyncstatus": "AI Sync-Status",
"aiKnowledgeLastSync": "AI Letzter Sync"
"aiKnowledgeLastSync": "AI Letzter Sync",
"cAkten": "Akte",
"cAktenId": "Akten-ID",
"cAktenName": "Aktenname",
"aiCollectionId": "AI Collection-ID",
"aiSyncHash": "AI Sync-Hash",
"aiSyncStatus": "AI Sync-Status",
"aiLastSync": "AI Letzter Sync",
"aiFileId": "AI File-ID"
},
"links": {
"cAdvowareAkten": "Advoware Akte",
"contactsvmhdokumente": "Freigegebene Nutzer",
"vmhMietverhltnisesDokumente": "Mietverhältnisse",
"vmhErstgespraechsdokumente": "Erstgespräche",
@@ -39,7 +43,8 @@
"mietobjekt2dokumente": "Mietobjekte",
"mietinkassosdokumente": "Mietinkasso",
"kndigungensdokumente": "Kündigungen",
"aIKnowledges": "AI Knowledge"
"aIKnowledges": "AI Knowledge",
"cAkten": "Akte"
},
"labels": {
"Create CDokumente": "Dokument erstellen"
@@ -47,13 +52,18 @@
"tooltips": {
"blake3hash": "Kryptografischer Blake3-Hash der Datei (schneller und sicherer als MD5/SHA256)",
"hnr": "Hierarchische Referenznummer in Advoware",
"syncStatus": "Status der Synchronisation mit Advoware: new=neu, unclean=geändert, synced=synchronisiert, failed=Fehler, unsupported=nicht unterstützt",
"syncedHash": "Hash-Wert bei letzter erfolgreicher Synchronisation",
"syncStatus": "Advoware Sync-Status: new=neu, unclean=geändert, synced=synchronisiert, failed=Fehler, unsupported=nicht unterstützt",
"syncedHash": "Hash-Wert bei letzter erfolgreicher Advoware-Synchronisation",
"usn": "Update Sequence Number - Versionsnummer für Synchronisation",
"dateipfad": "Windows-Dateipfad des Dokuments in Advoware",
"lastSyncTimestamp": "Zeitstempel der letzten erfolgreichen Synchronisation mit Advoware",
"lastSyncTimestamp": "Zeitstempel der letzten erfolgreichen Advoware-Synchronisation",
"advowareArt": "Dokumententyp/Art wie in Advoware klassifiziert",
"advowareBemerkung": "Bemerkungsfeld aus Advoware - wird bei Sync übernommen"
"advowareBemerkung": "Bemerkungsfeld aus Advoware - wird bei Sync übernommen",
"aiCollectionId": "ID der KI-Collection, in der dieses Dokument indexiert ist",
"aiSyncHash": "Hash-Wert bei letzter erfolgreicher KI-Synchronisation",
"aiSyncStatus": "Synchronisationsstatus mit der KI-Datenbank: new=neu, unclean=geändert, synced=synchronisiert, failed=Fehler, unsupported=nicht unterstützt",
"aiLastSync": "Zeitstempel der letzten erfolgreichen KI-Synchronisation",
"aiFileId": "Datei-ID in der KI-Datenbank nach erfolgter Synchronisation"
},
"options": {
"syncStatus": {
@@ -62,6 +72,13 @@
"synced": "Synchronisiert",
"failed": "Fehler",
"unsupported": "Nicht unterstützt"
},
"aiSyncStatus": {
"new": "Neu",
"unclean": "Geändert",
"synced": "Synchronisiert",
"failed": "Fehler",
"unsupported": "Nicht unterstützt"
}
}
}

View File

@@ -6,6 +6,9 @@
"Log": "Log"
},
"scopeNamesPlural": {
"CAdvowareAkten": "Advoware Akten"
"CAkten": "Akten"
},
"scopeNames": {
"CAkten": "Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Συναντήσεις",
"calls": "Κλήσεις",
"tasks": "Εργασίες"
},
"labels": {
"Create CAkten": "Δημιουργία Advoware Akten"
}
}

View File

@@ -0,0 +1 @@
{}

View File

@@ -1,12 +1,79 @@
{
"fields": {
},
"links": {
"meetings": "Meetings",
"calls": "Calls",
"tasks": "Tasks"
},
"labels": {
"Create CAkten": "Create Akten"
}
}
{
"links": {
"meetings": "Meetings",
"calls": "Calls",
"tasks": "Tasks",
"vmhRumungsklage": "Eviction Lawsuits",
"mietinkasso": "Rent Collection",
"kuendigungen": "Terminations",
"dokumentes": "Documents"
},
"labels": {
"Create CAkten": "Erstellen Akten"
},
"fields": {
"vmhRumungsklage": "Eviction Lawsuit",
"mietinkasso": "Rent Collection",
"aktenzeichen": "File Reference",
"aktennummer": "File Number",
"syncStatus": "Advoware Sync Status",
"lastSync": "Advoware Last Sync",
"aktivierungsstatus": "Advoware Activation Status",
"aiCollectionId": "AI Collection ID",
"aiAktivierungsstatus": "AI Activation Status",
"aiSyncStatus": "AI Sync Status",
"aiLastSync": "AI Last Sync",
"globalSyncStatus": "Global Sync Status",
"globalLastSync": "Global Last Sync",
"syncSchalter": "Sync Active",
"dokumentes": "Documents"
},
"options": {
"syncStatus": {
"synced": "Synchronized",
"unclean": "Not Synchronized",
"pending_sync": "Synchronization Pending",
"failed": "Failed"
},
"aktivierungsstatus": {
"new": "New",
"import": "Import",
"active": "Active",
"paused": "Paused",
"deactivated": "Deactivated"
},
"aiAktivierungsstatus": {
"new": "New",
"import": "Import",
"active": "Active",
"paused": "Paused",
"deactivated": "Deactivated"
},
"aiSyncStatus": {
"synced": "Synchronized",
"unclean": "Not Synchronized",
"pending_sync": "Synchronization Pending",
"failed": "Failed"
},
"globalSyncStatus": {
"synced": "Synchronized",
"unclean": "Not Synchronized",
"pending_sync": "Synchronization Pending",
"failed": "Failed"
}
},
"tooltips": {
"syncStatus": "Advoware sync status: synced = All documents synchronized, unclean = At least one document changed, pending_sync = Pending, failed = Failed.",
"lastSync": "Timestamp of last successful Advoware synchronization",
"aktivierungsstatus": "Advoware activation status: new = Newly created, import = Imported from Advoware, active = Actively synchronized, paused = Paused, deactivated = Deactivated",
"aiCollectionId": "Unique ID of the AI database/collection for this file",
"aiAktivierungsstatus": "AI sync activation status: new = New, import = Imported, active = Actively synchronized, paused = Paused, deactivated = Deactivated",
"aiSyncStatus": "AI sync status: synced = All documents synchronized, unclean = Changes pending, pending_sync = Pending, failed = Failed",
"aiLastSync": "Timestamp of last successful AI synchronization",
"advowareSyncEnabled": "Enable or disable Advoware synchronization for this file",
"aiSyncEnabled": "Enable or disable AI synchronization for this file",
"globalSyncStatus": "Overall sync status across all synchronization systems",
"globalLastSync": "Timestamp of last sync across all systems",
"syncSchalter": "Global sync switch: enables or disables all synchronizations for this file"
}
}

View File

@@ -0,0 +1,33 @@
{
"labels": {
"Create CAktenCDokumente": "Create Advoware Document Link",
"CAktenCDokumente": "Advoware Document Links"
},
"fields": {
"cAkten": "File",
"cAktenId": "File ID",
"cDokumente": "Document",
"cDokumenteId": "Document ID",
"hnr": "HNR",
"syncStatus": "Sync Status",
"syncedHash": "Sync Hash",
"deleted": "Deleted"
},
"links": {
"cAkten": "File",
"cDokumente": "Document"
},
"options": {
"syncStatus": {
"new": "New",
"changed": "Changed",
"synced": "Synced",
"deleted": "Deleted"
}
},
"tooltips": {
"hnr": "Advoware HNR reference for this document",
"syncStatus": "Synchronization status with Advoware",
"syncedHash": "Hash value of the last synchronized document state (for change detection)"
}
}

View File

@@ -2,15 +2,12 @@
"fields": {
"dokument": "Download",
"preview": "Preview",
"cAdvowareAkten": "Advoware File",
"cAdvowareAktenId": "Advoware File ID",
"cAdvowareAktenName": "Advoware File Name",
"hnr": "HNR (Advoware)",
"syncStatus": "Sync Status",
"syncedHash": "Sync Hash",
"syncStatus": "Advoware Sync Status",
"syncedHash": "Advoware Sync Hash",
"usn": "USN",
"dateipfad": "File Path",
"lastSyncTimestamp": "Last Sync",
"lastSyncTimestamp": "Advoware Last Sync",
"advowareArt": "Advoware Type",
"advowareBemerkung": "Advoware Remarks",
"contactsvmhdokumente": "Portal Users",
@@ -26,10 +23,17 @@
"aIKnowledges": "AI Knowledge",
"aiKnowledgeAiDocumentId": "AI Document ID",
"aiKnowledgeSyncstatus": "AI Sync Status",
"aiKnowledgeLastSync": "AI Last Sync"
"aiKnowledgeLastSync": "AI Last Sync",
"cAkten": "File",
"cAktenId": "File ID",
"cAktenName": "File Name",
"aiCollectionId": "AI Collection ID",
"aiSyncHash": "AI Sync Hash",
"aiSyncStatus": "AI Sync Status",
"aiLastSync": "AI Last Sync",
"aiFileId": "AI File ID"
},
"links": {
"cAdvowareAkten": "Advoware File",
"contactsvmhdokumente": "Portal Users",
"vmhMietverhltnisesDokumente": "Tenancies",
"vmhErstgespraechsdokumente": "Initial Consultations",
@@ -39,7 +43,8 @@
"mietobjekt2dokumente": "Properties",
"mietinkassosdokumente": "Rent Collection",
"kndigungensdokumente": "Terminations",
"aIKnowledges": "AI Knowledge"
"aIKnowledges": "AI Knowledge",
"cAkten": "File"
},
"labels": {
"Create CDokumente": "Create Dokument"
@@ -47,18 +52,24 @@
"layouts": {
"listRaeumungsKl": "List (RaeumungsKl)",
"listForAdvowareAkten": "List for Advoware Akten",
"listForAIKnowledge": "List for AI Knowledge"
"listForAIKnowledge": "List for AI Knowledge",
"listForAkten": "List for Akten"
},
"tooltips": {
"blake3hash": "Cryptographic Blake3 hash of the file (faster and more secure than MD5/SHA256)",
"hnr": "Hierarchical reference number in Advoware",
"syncStatus": "Sync status with Advoware: new=new, unclean=changed, synced=synchronized, failed=error, unsupported=not supported",
"syncedHash": "Hash value at last successful synchronization",
"syncStatus": "Advoware sync status: new=new, unclean=changed, synced=synchronized, failed=error, unsupported=not supported",
"syncedHash": "Hash value at last successful Advoware synchronization",
"usn": "Update Sequence Number - Version number for synchronization",
"dateipfad": "Windows file path of the document in Advoware",
"lastSyncTimestamp": "Timestamp of last successful synchronization with Advoware",
"lastSyncTimestamp": "Timestamp of last successful Advoware synchronization",
"advowareArt": "Document type/kind as classified in Advoware",
"advowareBemerkung": "Remarks field from Advoware - synced automatically"
"advowareBemerkung": "Remarks field from Advoware - synced automatically",
"aiCollectionId": "ID of the AI collection in which this document is indexed",
"aiSyncHash": "Hash value at last successful AI synchronization",
"aiSyncStatus": "AI sync status: new=new, unclean=changed, synced=synchronized, failed=error, unsupported=not supported",
"aiLastSync": "Timestamp of last successful AI synchronization",
"aiFileId": "File ID in the AI database after successful synchronization"
},
"options": {
"syncStatus": {
@@ -67,6 +78,13 @@
"synced": "Synchronized",
"failed": "Failed",
"unsupported": "Unsupported"
},
"aiSyncStatus": {
"new": "New",
"unclean": "Changed",
"synced": "Synchronized",
"failed": "Failed",
"unsupported": "Unsupported"
}
}
}

View File

@@ -15,7 +15,7 @@
"CMietinkasso": "Mietinkasso",
"CKuendigung": "Kündigung",
"CPuls": "Puls",
"CAdvowareAkten": "Advoware Akten",
"CAkten": "Akten",
"CAIKnowledge": "AI Knowledge"
},
"scopeNamesPlural": {
@@ -34,7 +34,7 @@
"CMietinkasso": "Mietinkassa",
"CKuendigung": "Kündigungen",
"CPuls": "Pulse",
"CAdvowareAkten": "Advoware Akten",
"CAkten": "Akten",
"CAIKnowledge": "AI Knowledge"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Reuniones",
"calls": "Llamadas",
"tasks": "Tareas"
},
"labels": {
"Create CAkten": "Crear Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Presentaciones",
"calls": "Llamadas",
"tasks": "Tareas"
},
"labels": {
"Create CAkten": "Crear Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "جلسات",
"calls": "تماس ها",
"tasks": "وظایف"
},
"labels": {
"Create CAkten": "ایجاد Advoware Akten"
}
}

View File

@@ -0,0 +1,5 @@
{
"labels": {
"Create CAkten": "Créer un Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Sastanci",
"calls": "Pozivi",
"tasks": "Zadaci"
},
"labels": {
"Create CAkten": "Kreiraj Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "találkozók",
"calls": "felhívja",
"tasks": "Feladatok"
},
"labels": {
"Create CAkten": "{EntityTypeTranslated} létrehozása"
}
}

View File

@@ -0,0 +1,5 @@
{
"labels": {
"Create CAkten": "Buat Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Riunioni",
"calls": "Chiamate",
"tasks": "Compiti"
},
"labels": {
"Create CAkten": "Crea Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "会議",
"calls": "通話",
"tasks": "タスク"
},
"labels": {
"Create CAkten": "Advoware Akten を作成する"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Susitikimai",
"calls": "Skambučiai",
"tasks": "Užduotys"
},
"labels": {
"Create CAkten": "Sukurti Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Tikšanās",
"calls": "Zvani",
"tasks": "Uzdevumi"
},
"labels": {
"Create CAkten": "Izveidot Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Møter",
"calls": "Samtaler",
"tasks": "Oppgaver"
},
"labels": {
"Create CAkten": "Opprett Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Vergaderingen",
"calls": "Gesprekken",
"tasks": "Taken"
},
"labels": {
"Create CAkten": "Creëer Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Spotkania",
"calls": "Połączenia",
"tasks": "Zadania"
},
"labels": {
"Create CAkten": "Utwórz Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Reuniões",
"calls": "Ligações",
"tasks": "Tarefas"
},
"labels": {
"Create CAkten": "Criar Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Reuniões",
"calls": "Chamadas",
"tasks": "Tarefas"
},
"labels": {
"Create CAkten": "Criar Advoware Akten"
}
}

View File

@@ -0,0 +1,5 @@
{
"labels": {
"Create CAkten": "Creare Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Встречи",
"calls": "Звонки",
"tasks": "Задачи"
},
"labels": {
"Create CAkten": "Создать Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Stretnutia",
"calls": "Hovory",
"tasks": "Úlohy"
},
"labels": {
"Create CAkten": "Vytvoriť Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Srečanja",
"calls": "Klici",
"tasks": "Naloge"
},
"labels": {
"Create CAkten": "Ustvari Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Ročišta",
"calls": "Pozivi",
"tasks": "Zadaci"
},
"labels": {
"Create CAkten": "Napravi Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Möten",
"calls": "Samtal",
"tasks": "Uppgifter"
},
"labels": {
"Create CAkten": "Skapa Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "การประชุม",
"calls": "โทร",
"tasks": "งาน"
},
"labels": {
"Create CAkten": "สร้าง Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Toplantılar",
"calls": "(Seslenme)",
"tasks": "Görevler"
},
"labels": {
"Create CAkten": "Advoware Akten oluştur"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Зустрічі",
"calls": "Дзвінки",
"tasks": "Завдання"
},
"labels": {
"Create CAkten": "Створити Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "ملاقاتیں",
"calls": "کالز",
"tasks": "کام"
},
"labels": {
"Create CAkten": "{entityTypetranslated} بنائیں"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "Cuộc hẹn",
"calls": "Cuộc gọi",
"tasks": "Nhiệm vụ"
},
"labels": {
"Create CAkten": "Tạo Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "会议",
"calls": "通话",
"tasks": "任务"
},
"labels": {
"Create CAkten": "创建 Advoware Akten"
}
}

View File

@@ -0,0 +1,10 @@
{
"links": {
"meetings": "會議",
"calls": "通話",
"tasks": "任務"
},
"labels": {
"Create CAkten": "建立Advoware Akten"
}
}

View File

@@ -0,0 +1,30 @@
{
"_delimiter_": {
"disabled": true
},
"activities": {
"disabled": true
},
"history": {
"disabled": true
},
"_tabBreak_0": {
"index": 0,
"tabBreak": true,
"tabLabel": "Dokumente"
},
"dokumentes": {
"index": 1,
"view": "views/record/panels/relationship",
"layout": "listForAkten"
},
"_tabBreak_1": {
"index": 2,
"tabBreak": true,
"tabLabel": "Ereignisse"
},
"stream": {
"sticked": false,
"index": 3
}
}

View File

@@ -0,0 +1,14 @@
[
{
"name": ":assignedUser"
},
{
"name": "teams"
},
{
"name": "vmhRumungsklage"
},
{
"name": "mietinkasso"
}
]

View File

@@ -0,0 +1,78 @@
[
{
"rows": [
[
{
"name": "name"
},
{
"name": "syncSchalter"
}
],
[
{
"name": "globalSyncStatus"
},
{
"name": "globalLastSync"
}
]
],
"style": "default",
"label": "Übersicht"
},
{
"rows": [
[
{
"name": "aktennummer"
},
{
"name": "aktenzeichen"
}
],
[
{},
{
"name": "aktivierungsstatus"
}
],
[
{
"name": "syncStatus"
},
{
"name": "lastSync"
}
]
],
"style": "default",
"label": "Advoware-Sync"
},
{
"rows": [
[
{},
{
"name": "aiAktivierungsstatus"
}
],
[
{
"name": "aiSyncStatus"
},
{
"name": "aiLastSync"
}
],
[
{
"name": "aiCollectionId"
},
{}
]
],
"style": "default",
"label": "AI-Sync"
}
]

View File

@@ -0,0 +1,21 @@
[
{
"rows": [
[
{
"name": "name"
}
],
[
{
"name": "mietinkasso"
},
{
"name": "vmhRumungsklage"
}
]
],
"style": "default",
"label": ""
}
]

View File

@@ -0,0 +1,14 @@
[
{
"name": "name",
"link": true
},
{
"name": "mietinkasso",
"width": 20
},
{
"name": "vmhRumungsklage",
"width": 20
}
]

View File

@@ -0,0 +1,39 @@
[
{
"name": "name",
"link": true,
"width": 20
},
{
"name": "advowareArt",
"align": "left",
"width": 12
},
{
"name": "advowareBemerkung",
"align": "left",
"notSortable": true,
"width": 18
},
{
"name": "syncStatus",
"align": "left",
"width": 12
},
{
"name": "lastSyncTimestamp",
"align": "left",
"width": 13
},
{
"name": "dokument",
"notSortable": true,
"align": "left",
"width": 12
},
{
"name": "createdAt",
"align": "left",
"width": 13
}
]

View File

@@ -64,7 +64,7 @@
"rows": [
[
{
"name": "cAdvowareAkten"
"name": "cAkten"
},
{
"name": "dateipfad"

View File

@@ -0,0 +1,40 @@
[
{
"name": "name",
"link": true
},
{
"name": "advowareArt",
"align": "left"
},
{
"name": "syncStatus",
"align": "left"
},
{
"name": "lastSyncTimestamp",
"align": "left"
},
{
"name": "aiSyncStatus",
"align": "left"
},
{
"name": "aiLastSync",
"align": "left"
},
{
"name": "description",
"notSortable": true,
"align": "left"
},
{
"name": "dokument",
"notSortable": true,
"align": "left"
},
{
"name": "createdAt",
"align": "left"
}
]

View File

@@ -0,0 +1,4 @@
{
"contactLink": null,
"accountLink": null
}

View File

@@ -0,0 +1,59 @@
{
"controller": "controllers/record",
"boolFilterList": [
"onlyMy"
],
"sidePanels": {
"detail": [
{
"name": "activities",
"reference": "activities"
},
{
"name": "history",
"reference": "history"
},
{
"name": "tasks",
"reference": "tasks"
}
]
},
"bottomPanels": {
"detail": [
{
"name": "activities",
"reference": "activities",
"disabled": true
},
{
"name": "history",
"reference": "history",
"disabled": true
},
{
"name": "stream",
"label": "Ereignisse",
"reference": "stream",
"stacked": false
}
]
},
"relationshipPanels": {
"vmhRumungsklage": {
"layout": null,
"selectPrimaryFilterName": null
},
"mietinkasso": {
"layout": null,
"selectPrimaryFilterName": null
},
"dokumentes": {
"layout": "listForAkten",
"selectPrimaryFilterName": null
}
},
"kanbanViewMode": false,
"color": null,
"iconClass": null
}

View File

@@ -47,10 +47,6 @@
"layout": null,
"selectPrimaryFilterName": null
},
"advowareAktens": {
"layout": null,
"selectPrimaryFilterName": null
},
"aIKnowledges": {
"layout": null,
"selectPrimaryFilterName": null

View File

@@ -103,17 +103,6 @@
"default": "new",
"tooltip": true,
"isCustom": true
},
"dokumentes": {
"type": "linkMultiple",
"layoutDetailDisabled": false,
"layoutMassUpdateDisabled": false,
"layoutListDisabled": false,
"noLoad": false,
"importDisabled": false,
"exportDisabled": false,
"customizationDisabled": false,
"isCustom": true
}
},
"links": {
@@ -174,13 +163,6 @@
"entity": "CKuendigung",
"audited": false,
"isCustom": true
},
"dokumentes": {
"type": "hasMany",
"foreign": "cAdvowareAkten",
"entity": "CDokumente",
"audited": true,
"isCustom": true
}
},
"collection": {

View File

@@ -34,6 +34,172 @@
"teams": {
"type": "linkMultiple",
"view": "views/fields/teams"
},
"vmhRumungsklage": {
"type": "link"
},
"mietinkasso": {
"type": "link"
},
"aktenzeichen": {
"type": "varchar",
"required": true,
"maxLength": 100,
"copyToClipboard": true,
"readOnlyAfterCreate": true,
"options": [],
"isCustom": true
},
"aktennummer": {
"type": "int",
"required": true,
"readOnlyAfterCreate": true,
"disableFormatting": true,
"isCustom": true
},
"syncStatus": {
"type": "enum",
"required": false,
"options": [
"synced",
"unclean",
"pending_sync",
"failed"
],
"style": {
"synced": "success",
"unclean": "warning",
"pending_sync": "default",
"failed": "danger"
},
"default": "unclean",
"tooltip": true,
"isCustom": true
},
"lastSync": {
"type": "datetime",
"required": false,
"readOnly": true,
"tooltip": true,
"isCustom": true
},
"aktivierungsstatus": {
"type": "enum",
"required": false,
"options": [
"new",
"import",
"active",
"paused",
"deactivated"
],
"style": {
"new": "primary",
"import": "info",
"active": "success",
"paused": "warning",
"deactivated": "danger"
},
"default": "new",
"tooltip": true,
"isCustom": true
},
"dokumentes": {
"type": "linkMultiple",
"layoutDetailDisabled": false,
"layoutMassUpdateDisabled": false,
"layoutListDisabled": false,
"noLoad": false,
"importDisabled": false,
"exportDisabled": false,
"customizationDisabled": false,
"isCustom": true
},
"aiCollectionId": {
"type": "varchar",
"maxLength": 255,
"copyToClipboard": true,
"tooltip": true,
"isCustom": true
},
"aiAktivierungsstatus": {
"type": "enum",
"required": false,
"options": [
"new",
"import",
"active",
"paused",
"deactivated"
],
"style": {
"new": "primary",
"import": "info",
"active": "success",
"paused": "warning",
"deactivated": "danger"
},
"default": "new",
"tooltip": true,
"isCustom": true
},
"aiSyncStatus": {
"type": "enum",
"required": false,
"options": [
"synced",
"unclean",
"pending_sync",
"failed"
],
"style": {
"synced": "success",
"unclean": "warning",
"pending_sync": "info",
"failed": "danger"
},
"default": "unclean",
"tooltip": true,
"isCustom": true
},
"aiLastSync": {
"type": "datetime",
"required": false,
"readOnly": true,
"tooltip": true,
"isCustom": true
},
"globalSyncStatus": {
"type": "enum",
"required": false,
"options": [
"synced",
"unclean",
"pending_sync",
"failed"
],
"style": {
"synced": "success",
"unclean": "warning",
"pending_sync": "info",
"failed": "danger"
},
"default": "unclean",
"tooltip": true,
"isCustom": true
},
"globalLastSync": {
"type": "datetime",
"required": false,
"readOnly": true,
"tooltip": true,
"isCustom": true
},
"syncSchalter": {
"type": "bool",
"default": true,
"tooltip": true,
"isCustom": true
}
},
"links": {
@@ -75,11 +241,42 @@
"entity": "Email",
"foreign": "parent",
"layoutRelationshipsDisabled": true
},
"vmhRumungsklage": {
"type": "belongsTo",
"foreign": "advowareAkten",
"entity": "CVmhRumungsklage",
"isCustom": true
},
"mietinkasso": {
"type": "belongsTo",
"foreign": "advowareAkten",
"entity": "CMietinkasso",
"isCustom": true
},
"kuendigungen": {
"type": "hasMany",
"foreign": "advowareAkten",
"entity": "CKuendigung",
"audited": false,
"isCustom": true
},
"dokumentes": {
"type": "hasMany",
"foreign": "cAkten",
"entity": "CDokumente",
"audited": true,
"isCustom": true
}
},
"collection": {
"orderBy": "createdAt",
"order": "desc"
"order": "desc",
"textFilterFields": [
"name"
],
"fullTextSearch": false,
"countDisabled": false
},
"indexes": {
"name": {
@@ -106,5 +303,7 @@
"id"
]
}
}
},
"optimisticConcurrencyControl": false,
"tableName": "c_advoware_akten"
}

View File

@@ -61,20 +61,6 @@
"isCustom": true,
"tooltip": true
},
"cAdvowareAktenId": {
"type": "varchar",
"len": 17,
"index": true,
"isCustom": true
},
"cAdvowareAktenName": {
"type": "varchar",
"isCustom": true
},
"cAdvowareAkten": {
"type": "link",
"isCustom": true
},
"hnr": {
"type": "int",
"tooltip": true,
@@ -169,6 +155,64 @@
"layoutAvailabilityList": [
"listForAIKnowledge"
]
},
"cAktenId": {
"type": "varchar",
"len": 17,
"index": true,
"isCustom": true
},
"cAktenName": {
"type": "varchar",
"isCustom": true
},
"cAkten": {
"type": "link",
"isCustom": true
},
"aiCollectionId": {
"type": "varchar",
"maxLength": 255,
"tooltip": true,
"isCustom": true
},
"aiSyncHash": {
"type": "varchar",
"len": 64,
"tooltip": true,
"isCustom": true
},
"aiSyncStatus": {
"type": "enum",
"options": [
"new",
"unclean",
"synced",
"failed",
"unsupported"
],
"style": {
"new": "info",
"unclean": "warning",
"synced": "success",
"failed": "danger",
"unsupported": "default"
},
"default": "new",
"tooltip": true,
"isCustom": true
},
"aiLastSync": {
"type": "datetime",
"readOnly": true,
"tooltip": true,
"isCustom": true
},
"aiFileId": {
"type": "varchar",
"maxLength": 255,
"tooltip": true,
"isCustom": true
}
},
"links": {
@@ -272,13 +316,6 @@
"audited": false,
"isCustom": true
},
"cAdvowareAkten": {
"type": "belongsTo",
"foreign": "dokumentes",
"entity": "CAdvowareAkten",
"audited": true,
"isCustom": true
},
"aIKnowledges": {
"type": "hasMany",
"relationName": "cAIKnowledgeDokumente",
@@ -291,6 +328,13 @@
"syncstatus": "aiKnowledgeSyncstatus",
"lastSync": "aiKnowledgeLastSync"
}
},
"cAkten": {
"type": "belongsTo",
"foreign": "dokumentes",
"entity": "CAkten",
"audited": true,
"isCustom": true
}
},
"collection": {

View File

@@ -355,7 +355,7 @@
"advowareAkten": {
"type": "belongsTo",
"foreign": "kuendigungen",
"entity": "CAdvowareAkten",
"entity": "CAkten",
"audited": false,
"isCustom": true
},
@@ -413,7 +413,6 @@
"aktennr"
]
},
"status": {
"columns": [
"status",

View File

@@ -199,7 +199,7 @@
"advowareAkten": {
"type": "hasOne",
"foreign": "mietinkasso",
"entity": "CAdvowareAkten",
"entity": "CAkten",
"isCustom": true
},
"aIKnowledge": {

View File

@@ -212,7 +212,7 @@
"advowareAkten": {
"type": "hasOne",
"foreign": "vmhRumungsklage",
"entity": "CAdvowareAkten",
"entity": "CAkten",
"isCustom": true
},
"aIKnowledge": {

View File

@@ -16,7 +16,7 @@
"CMietinkasso",
"CKuendigung",
"CPuls",
"CAdvowareAkten"
"CAkten"
]
},
"cWichtigkeit": {

View File

@@ -16,7 +16,7 @@
"CMietinkasso",
"CKuendigung",
"CPuls",
"CAdvowareAkten"
"CAkten"
]
}
}

View File

@@ -16,7 +16,7 @@
"CMietinkasso",
"CKuendigung",
"CPuls",
"CAdvowareAkten"
"CAkten"
]
}
}

View File

@@ -16,7 +16,7 @@
"CMietinkasso",
"CKuendigung",
"CPuls",
"CAdvowareAkten"
"CAkten"
]
}
}

View File

@@ -0,0 +1,3 @@
{
"updateDuplicateCheck": false
}

View File

@@ -0,0 +1,30 @@
{
"entity": true,
"layouts": true,
"tab": false,
"acl": true,
"aclPortal": true,
"aclPortalLevelList": [
"all",
"account",
"contact",
"own",
"no"
],
"customizable": true,
"importable": true,
"notifications": true,
"stream": true,
"disabled": true,
"type": "Base",
"module": "Custom",
"object": true,
"isCustom": true,
"statusField": null,
"kanbanStatusIgnoreList": null,
"stars": false,
"preserveAuditLog": false,
"duplicateCheckFieldList": [],
"collaborators": false,
"assignedUsers": false
}

View File

@@ -394,7 +394,7 @@ class CVmhMietverhltnis extends \Espo\Services\Record
$advowareAkteData['teamsIds'] = $teamsIds;
}
$advowareAkte = $this->entityManager->createEntity('CAdvowareAkten', $advowareAkteData);
$advowareAkte = $this->entityManager->createEntity('CAkten', $advowareAkteData);
if ($advowareAkte) {
// Link AdvowareAkte to Mietinkasso (hasOne relationship - set field directly)

View File

@@ -417,7 +417,7 @@ class CVmhRumungsklage extends \Espo\Services\Record
$existingAkteId = $kuendigung->get('advowareAktenId');
if ($existingAkteId) {
$existingAkte = $this->entityManager->getEntity('CAdvowareAkten', $existingAkteId);
$existingAkte = $this->entityManager->getEntity('CAkten', $existingAkteId);
if ($existingAkte) {
$advowareAkte = $existingAkte;
$GLOBALS['log']->info("CVmhRumungsklage: Using existing AdvowareAkte from Kündigung: {$existingAkte->getId()}");
@@ -457,7 +457,7 @@ class CVmhRumungsklage extends \Espo\Services\Record
$advowareAkteData['teamsIds'] = $teamsIds;
}
$advowareAkte = $this->entityManager->createEntity('CAdvowareAkten', $advowareAkteData);
$advowareAkte = $this->entityManager->createEntity('CAkten', $advowareAkteData);
if ($advowareAkte) {
$GLOBALS['log']->info("CVmhRumungsklage: Created new AdvowareAkte: {$advowareAkte->getId()}");