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') ->getRelation($raumungsklage, 'advowareAkten')
->findOne(); ->findOne();
if ($advowareAkte && !$foreignEntity->get('cAdvowareAktenId')) { if ($advowareAkte && !$foreignEntity->get('cAktenId')) {
$foreignEntity->set('cAdvowareAktenId', $advowareAkte->getId()); $foreignEntity->set('cAktenId', $advowareAkte->getId());
$foreignEntity->set('syncStatus', 'new'); $foreignEntity->set('syncStatus', 'new');
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]); $this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
} }
@@ -81,8 +81,8 @@ class PropagateDocumentsUp implements AfterRelate, AfterUnrelate
->getRelation($mietinkasso, 'advowareAkten') ->getRelation($mietinkasso, 'advowareAkten')
->findOne(); ->findOne();
if ($advowareAkte && !$foreignEntity->get('cAdvowareAktenId')) { if ($advowareAkte && !$foreignEntity->get('cAktenId')) {
$foreignEntity->set('cAdvowareAktenId', $advowareAkte->getId()); $foreignEntity->set('cAktenId', $advowareAkte->getId());
$foreignEntity->set('syncStatus', 'new'); $foreignEntity->set('syncStatus', 'new');
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]); $this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
} }
@@ -134,7 +134,7 @@ class PropagateDocumentsUp implements AfterRelate, AfterUnrelate
$this->unrelateDocument($mietinkasso, 'dokumentesmietinkasso', $foreignEntity); $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 // because the document might still be linked to Räumungsklage/Mietinkasso
} catch (\Exception $e) { } 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 <?php
namespace Espo\Custom\Hooks\CAdvowareAkten; namespace Espo\Custom\Hooks\CAkten;
use Espo\ORM\Entity; use Espo\ORM\Entity;
use Espo\ORM\Repository\Option\SaveOptions; use Espo\ORM\Repository\Option\SaveOptions;
@@ -36,7 +36,7 @@ class UpdateLastSyncFromDocuments implements BeforeSave
]) ])
->from('CDokumente') ->from('CDokumente')
->where([ ->where([
'cAdvowareAktenId' => $entity->getId(), 'cAktenId' => $entity->getId(),
'deleted' => false, 'deleted' => false,
'lastSyncTimestamp!=' => null 'lastSyncTimestamp!=' => null
]) ])
@@ -55,7 +55,7 @@ class UpdateLastSyncFromDocuments implements BeforeSave
} catch (\Exception $e) { } catch (\Exception $e) {
// Fehler loggen, aber nicht werfen (um Save nicht zu blockieren) // 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']) ->select(['syncStatus'])
->from('CDokumente') ->from('CDokumente')
->where([ ->where([
'cAdvowareAktenId' => $entity->getId(), 'cAktenId' => $entity->getId(),
'deleted' => false 'deleted' => false
]) ])
->build(); ->build();

View File

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

View File

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

View File

@@ -47,7 +47,7 @@ class SyncAdvowareAkte implements AfterRelate
$advowareAkteId = $foreignEntity->get('advowareAktenId'); $advowareAkteId = $foreignEntity->get('advowareAktenId');
if ($advowareAkteId) { if ($advowareAkteId) {
$advowareAkte = $this->entityManager->getEntity('CAdvowareAkten', $advowareAkteId); $advowareAkte = $this->entityManager->getEntity('CAkten', $advowareAkteId);
if ($advowareAkte) { if ($advowareAkte) {
$GLOBALS['log']->info("CKuendigung SyncAdvowareAkte: Found AdvowareAkte {$advowareAkte->getId()} on Räumungsklage {$foreignEntity->getId()}"); $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 // Set direct belongsTo relationship on document
if ($advowareAkten) { if ($advowareAkten) {
$foreignEntity->set('cAdvowareAktenId', $advowareAkten->getId()); $foreignEntity->set('cAktenId', $advowareAkten->getId());
$foreignEntity->set('syncStatus', 'new'); // Mark as new for Advoware sync $foreignEntity->set('syncStatus', 'new'); // Mark as new for Advoware sync
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]); $this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
} }
@@ -96,8 +96,8 @@ class PropagateDocuments implements AfterRelate, AfterUnrelate
->findOne(); ->findOne();
// Remove direct belongsTo relationship from document // Remove direct belongsTo relationship from document
if ($advowareAkten && $foreignEntity->get('cAdvowareAktenId') === $advowareAkten->getId()) { if ($advowareAkten && $foreignEntity->get('cAktenId') === $advowareAkten->getId()) {
$foreignEntity->set('cAdvowareAktenId', null); $foreignEntity->set('cAktenId', null);
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]); $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 // Set direct belongsTo relationship on document
if ($advowareAkten) { if ($advowareAkten) {
$foreignEntity->set('cAdvowareAktenId', $advowareAkten->getId()); $foreignEntity->set('cAktenId', $advowareAkten->getId());
$foreignEntity->set('syncStatus', 'new'); // Mark as new for Advoware sync $foreignEntity->set('syncStatus', 'new'); // Mark as new for Advoware sync
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]); $this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
} }
@@ -96,8 +96,8 @@ class PropagateDocuments implements AfterRelate, AfterUnrelate
->findOne(); ->findOne();
// Remove direct belongsTo relationship from document // Remove direct belongsTo relationship from document
if ($advowareAkten && $foreignEntity->get('cAdvowareAktenId') === $advowareAkten->getId()) { if ($advowareAkten && $foreignEntity->get('cAktenId') === $advowareAkten->getId()) {
$foreignEntity->set('cAdvowareAktenId', null); $foreignEntity->set('cAktenId', null);
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]); $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": { "links": {
"calls": "Anrufe", "calls": "Anrufe",
"tasks": "Aufgaben" "tasks": "Aufgaben",
}, "vmhRumungsklage": "Räumungsklagen",
"labels": { "mietinkasso": "Mietinkasso",
"Create CAkten": "Akten erstellen" "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", "dokument": "Download",
"preview": "Vorschau", "preview": "Vorschau",
"blake3hash": "Blake3-Hash", "blake3hash": "Blake3-Hash",
"cAdvowareAkten": "Advoware Akte",
"cAdvowareAktenId": "Advoware Akten-ID",
"cAdvowareAktenName": "Advoware Aktenname",
"hnr": "HNR (Advoware)", "hnr": "HNR (Advoware)",
"syncStatus": "Sync-Status", "syncStatus": "Advoware Sync-Status",
"syncedHash": "Sync-Hash", "syncedHash": "Advoware Sync-Hash",
"usn": "USN", "usn": "USN",
"dateipfad": "Dateipfad", "dateipfad": "Dateipfad",
"lastSyncTimestamp": "Letzter Sync", "lastSyncTimestamp": "Advoware Letzter Sync",
"advowareArt": "Advoware Art", "advowareArt": "Advoware Art",
"advowareBemerkung": "Advoware Bemerkung", "advowareBemerkung": "Advoware Bemerkung",
"contactsvmhdokumente": "Freigegebene Nutzer", "contactsvmhdokumente": "Freigegebene Nutzer",
@@ -26,10 +23,17 @@
"aIKnowledges": "AI Knowledge", "aIKnowledges": "AI Knowledge",
"aiKnowledgeAiDocumentId": "AI Document ID", "aiKnowledgeAiDocumentId": "AI Document ID",
"aiKnowledgeSyncstatus": "AI Sync-Status", "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": { "links": {
"cAdvowareAkten": "Advoware Akte",
"contactsvmhdokumente": "Freigegebene Nutzer", "contactsvmhdokumente": "Freigegebene Nutzer",
"vmhMietverhltnisesDokumente": "Mietverhältnisse", "vmhMietverhltnisesDokumente": "Mietverhältnisse",
"vmhErstgespraechsdokumente": "Erstgespräche", "vmhErstgespraechsdokumente": "Erstgespräche",
@@ -39,7 +43,8 @@
"mietobjekt2dokumente": "Mietobjekte", "mietobjekt2dokumente": "Mietobjekte",
"mietinkassosdokumente": "Mietinkasso", "mietinkassosdokumente": "Mietinkasso",
"kndigungensdokumente": "Kündigungen", "kndigungensdokumente": "Kündigungen",
"aIKnowledges": "AI Knowledge" "aIKnowledges": "AI Knowledge",
"cAkten": "Akte"
}, },
"labels": { "labels": {
"Create CDokumente": "Dokument erstellen" "Create CDokumente": "Dokument erstellen"
@@ -47,13 +52,18 @@
"tooltips": { "tooltips": {
"blake3hash": "Kryptografischer Blake3-Hash der Datei (schneller und sicherer als MD5/SHA256)", "blake3hash": "Kryptografischer Blake3-Hash der Datei (schneller und sicherer als MD5/SHA256)",
"hnr": "Hierarchische Referenznummer in Advoware", "hnr": "Hierarchische Referenznummer in Advoware",
"syncStatus": "Status der Synchronisation mit Advoware: new=neu, unclean=geändert, synced=synchronisiert, failed=Fehler, unsupported=nicht unterstützt", "syncStatus": "Advoware Sync-Status: new=neu, unclean=geändert, synced=synchronisiert, failed=Fehler, unsupported=nicht unterstützt",
"syncedHash": "Hash-Wert bei letzter erfolgreicher Synchronisation", "syncedHash": "Hash-Wert bei letzter erfolgreicher Advoware-Synchronisation",
"usn": "Update Sequence Number - Versionsnummer für Synchronisation", "usn": "Update Sequence Number - Versionsnummer für Synchronisation",
"dateipfad": "Windows-Dateipfad des Dokuments in Advoware", "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", "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": { "options": {
"syncStatus": { "syncStatus": {
@@ -62,6 +72,13 @@
"synced": "Synchronisiert", "synced": "Synchronisiert",
"failed": "Fehler", "failed": "Fehler",
"unsupported": "Nicht unterstützt" "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" "Log": "Log"
}, },
"scopeNamesPlural": { "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",
"links": { "calls": "Calls",
"meetings": "Meetings", "tasks": "Tasks",
"calls": "Calls", "vmhRumungsklage": "Eviction Lawsuits",
"tasks": "Tasks" "mietinkasso": "Rent Collection",
}, "kuendigungen": "Terminations",
"labels": { "dokumentes": "Documents"
"Create CAkten": "Create Akten" },
} "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": { "fields": {
"dokument": "Download", "dokument": "Download",
"preview": "Preview", "preview": "Preview",
"cAdvowareAkten": "Advoware File",
"cAdvowareAktenId": "Advoware File ID",
"cAdvowareAktenName": "Advoware File Name",
"hnr": "HNR (Advoware)", "hnr": "HNR (Advoware)",
"syncStatus": "Sync Status", "syncStatus": "Advoware Sync Status",
"syncedHash": "Sync Hash", "syncedHash": "Advoware Sync Hash",
"usn": "USN", "usn": "USN",
"dateipfad": "File Path", "dateipfad": "File Path",
"lastSyncTimestamp": "Last Sync", "lastSyncTimestamp": "Advoware Last Sync",
"advowareArt": "Advoware Type", "advowareArt": "Advoware Type",
"advowareBemerkung": "Advoware Remarks", "advowareBemerkung": "Advoware Remarks",
"contactsvmhdokumente": "Portal Users", "contactsvmhdokumente": "Portal Users",
@@ -26,10 +23,17 @@
"aIKnowledges": "AI Knowledge", "aIKnowledges": "AI Knowledge",
"aiKnowledgeAiDocumentId": "AI Document ID", "aiKnowledgeAiDocumentId": "AI Document ID",
"aiKnowledgeSyncstatus": "AI Sync Status", "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": { "links": {
"cAdvowareAkten": "Advoware File",
"contactsvmhdokumente": "Portal Users", "contactsvmhdokumente": "Portal Users",
"vmhMietverhltnisesDokumente": "Tenancies", "vmhMietverhltnisesDokumente": "Tenancies",
"vmhErstgespraechsdokumente": "Initial Consultations", "vmhErstgespraechsdokumente": "Initial Consultations",
@@ -39,7 +43,8 @@
"mietobjekt2dokumente": "Properties", "mietobjekt2dokumente": "Properties",
"mietinkassosdokumente": "Rent Collection", "mietinkassosdokumente": "Rent Collection",
"kndigungensdokumente": "Terminations", "kndigungensdokumente": "Terminations",
"aIKnowledges": "AI Knowledge" "aIKnowledges": "AI Knowledge",
"cAkten": "File"
}, },
"labels": { "labels": {
"Create CDokumente": "Create Dokument" "Create CDokumente": "Create Dokument"
@@ -47,18 +52,24 @@
"layouts": { "layouts": {
"listRaeumungsKl": "List (RaeumungsKl)", "listRaeumungsKl": "List (RaeumungsKl)",
"listForAdvowareAkten": "List for Advoware Akten", "listForAdvowareAkten": "List for Advoware Akten",
"listForAIKnowledge": "List for AI Knowledge" "listForAIKnowledge": "List for AI Knowledge",
"listForAkten": "List for Akten"
}, },
"tooltips": { "tooltips": {
"blake3hash": "Cryptographic Blake3 hash of the file (faster and more secure than MD5/SHA256)", "blake3hash": "Cryptographic Blake3 hash of the file (faster and more secure than MD5/SHA256)",
"hnr": "Hierarchical reference number in Advoware", "hnr": "Hierarchical reference number in Advoware",
"syncStatus": "Sync status with Advoware: new=new, unclean=changed, synced=synchronized, failed=error, unsupported=not supported", "syncStatus": "Advoware sync status: new=new, unclean=changed, synced=synchronized, failed=error, unsupported=not supported",
"syncedHash": "Hash value at last successful synchronization", "syncedHash": "Hash value at last successful Advoware synchronization",
"usn": "Update Sequence Number - Version number for synchronization", "usn": "Update Sequence Number - Version number for synchronization",
"dateipfad": "Windows file path of the document in Advoware", "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", "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": { "options": {
"syncStatus": { "syncStatus": {
@@ -67,6 +78,13 @@
"synced": "Synchronized", "synced": "Synchronized",
"failed": "Failed", "failed": "Failed",
"unsupported": "Unsupported" "unsupported": "Unsupported"
},
"aiSyncStatus": {
"new": "New",
"unclean": "Changed",
"synced": "Synchronized",
"failed": "Failed",
"unsupported": "Unsupported"
} }
} }
} }

View File

@@ -15,7 +15,7 @@
"CMietinkasso": "Mietinkasso", "CMietinkasso": "Mietinkasso",
"CKuendigung": "Kündigung", "CKuendigung": "Kündigung",
"CPuls": "Puls", "CPuls": "Puls",
"CAdvowareAkten": "Advoware Akten", "CAkten": "Akten",
"CAIKnowledge": "AI Knowledge" "CAIKnowledge": "AI Knowledge"
}, },
"scopeNamesPlural": { "scopeNamesPlural": {
@@ -34,7 +34,7 @@
"CMietinkasso": "Mietinkassa", "CMietinkasso": "Mietinkassa",
"CKuendigung": "Kündigungen", "CKuendigung": "Kündigungen",
"CPuls": "Pulse", "CPuls": "Pulse",
"CAdvowareAkten": "Advoware Akten", "CAkten": "Akten",
"CAIKnowledge": "AI Knowledge" "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": [ "rows": [
[ [
{ {
"name": "cAdvowareAkten" "name": "cAkten"
}, },
{ {
"name": "dateipfad" "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, "layout": null,
"selectPrimaryFilterName": null "selectPrimaryFilterName": null
}, },
"advowareAktens": {
"layout": null,
"selectPrimaryFilterName": null
},
"aIKnowledges": { "aIKnowledges": {
"layout": null, "layout": null,
"selectPrimaryFilterName": null "selectPrimaryFilterName": null

View File

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

View File

@@ -34,6 +34,172 @@
"teams": { "teams": {
"type": "linkMultiple", "type": "linkMultiple",
"view": "views/fields/teams" "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": { "links": {
@@ -75,11 +241,42 @@
"entity": "Email", "entity": "Email",
"foreign": "parent", "foreign": "parent",
"layoutRelationshipsDisabled": true "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": { "collection": {
"orderBy": "createdAt", "orderBy": "createdAt",
"order": "desc" "order": "desc",
"textFilterFields": [
"name"
],
"fullTextSearch": false,
"countDisabled": false
}, },
"indexes": { "indexes": {
"name": { "name": {
@@ -106,5 +303,7 @@
"id" "id"
] ]
} }
} },
"optimisticConcurrencyControl": false,
"tableName": "c_advoware_akten"
} }

View File

@@ -61,20 +61,6 @@
"isCustom": true, "isCustom": true,
"tooltip": true "tooltip": true
}, },
"cAdvowareAktenId": {
"type": "varchar",
"len": 17,
"index": true,
"isCustom": true
},
"cAdvowareAktenName": {
"type": "varchar",
"isCustom": true
},
"cAdvowareAkten": {
"type": "link",
"isCustom": true
},
"hnr": { "hnr": {
"type": "int", "type": "int",
"tooltip": true, "tooltip": true,
@@ -169,6 +155,64 @@
"layoutAvailabilityList": [ "layoutAvailabilityList": [
"listForAIKnowledge" "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": { "links": {
@@ -272,13 +316,6 @@
"audited": false, "audited": false,
"isCustom": true "isCustom": true
}, },
"cAdvowareAkten": {
"type": "belongsTo",
"foreign": "dokumentes",
"entity": "CAdvowareAkten",
"audited": true,
"isCustom": true
},
"aIKnowledges": { "aIKnowledges": {
"type": "hasMany", "type": "hasMany",
"relationName": "cAIKnowledgeDokumente", "relationName": "cAIKnowledgeDokumente",
@@ -291,6 +328,13 @@
"syncstatus": "aiKnowledgeSyncstatus", "syncstatus": "aiKnowledgeSyncstatus",
"lastSync": "aiKnowledgeLastSync" "lastSync": "aiKnowledgeLastSync"
} }
},
"cAkten": {
"type": "belongsTo",
"foreign": "dokumentes",
"entity": "CAkten",
"audited": true,
"isCustom": true
} }
}, },
"collection": { "collection": {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -16,7 +16,7 @@
"CMietinkasso", "CMietinkasso",
"CKuendigung", "CKuendigung",
"CPuls", "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; $advowareAkteData['teamsIds'] = $teamsIds;
} }
$advowareAkte = $this->entityManager->createEntity('CAdvowareAkten', $advowareAkteData); $advowareAkte = $this->entityManager->createEntity('CAkten', $advowareAkteData);
if ($advowareAkte) { if ($advowareAkte) {
// Link AdvowareAkte to Mietinkasso (hasOne relationship - set field directly) // 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'); $existingAkteId = $kuendigung->get('advowareAktenId');
if ($existingAkteId) { if ($existingAkteId) {
$existingAkte = $this->entityManager->getEntity('CAdvowareAkten', $existingAkteId); $existingAkte = $this->entityManager->getEntity('CAkten', $existingAkteId);
if ($existingAkte) { if ($existingAkte) {
$advowareAkte = $existingAkte; $advowareAkte = $existingAkte;
$GLOBALS['log']->info("CVmhRumungsklage: Using existing AdvowareAkte from Kündigung: {$existingAkte->getId()}"); $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; $advowareAkteData['teamsIds'] = $teamsIds;
} }
$advowareAkte = $this->entityManager->createEntity('CAdvowareAkten', $advowareAkteData); $advowareAkte = $this->entityManager->createEntity('CAkten', $advowareAkteData);
if ($advowareAkte) { if ($advowareAkte) {
$GLOBALS['log']->info("CVmhRumungsklage: Created new AdvowareAkte: {$advowareAkte->getId()}"); $GLOBALS['log']->info("CVmhRumungsklage: Created new AdvowareAkte: {$advowareAkte->getId()}");

View File

@@ -69,67 +69,67 @@ return [
6 => 'CKuendigung', 6 => 'CKuendigung',
7 => 'CVmhRumungsklage', 7 => 'CVmhRumungsklage',
8 => 'CMietinkasso', 8 => 'CMietinkasso',
9 => 'CDokumente', 9 => 'CAkten',
10 => (object) [ 10 => 'CDokumente',
11 => (object) [
'type' => 'divider', 'type' => 'divider',
'id' => '342567', 'id' => '342567',
'text' => '$CRM' 'text' => '$CRM'
], ],
11 => 'Contact', 12 => 'Contact',
12 => (object) [ 13 => (object) [
'type' => 'divider', 'type' => 'divider',
'text' => '$Activities', 'text' => '$Activities',
'id' => '219419' 'id' => '219419'
], ],
13 => 'Email', 14 => 'Email',
14 => 'Call', 15 => 'Call',
15 => 'Task', 16 => 'Task',
16 => 'Calendar', 17 => 'Calendar',
17 => (object) [ 18 => (object) [
'type' => 'divider', 'type' => 'divider',
'id' => '655187', 'id' => '655187',
'text' => '$Support' 'text' => '$Support'
], ],
18 => 'Case', 19 => 'Case',
19 => 'KnowledgeBaseArticle', 20 => 'KnowledgeBaseArticle',
20 => (object) [ 21 => (object) [
'type' => 'divider', 'type' => 'divider',
'text' => NULL, 'text' => NULL,
'id' => '137994' 'id' => '137994'
], ],
21 => '_delimiter_', 22 => '_delimiter_',
22 => (object) [ 23 => (object) [
'type' => 'divider', 'type' => 'divider',
'text' => '$Marketing', 'text' => '$Marketing',
'id' => '463280' 'id' => '463280'
], ],
23 => 'Campaign', 24 => 'Campaign',
24 => 'TargetList', 25 => 'TargetList',
25 => (object) [ 26 => (object) [
'type' => 'divider', 'type' => 'divider',
'text' => '$Business', 'text' => '$Business',
'id' => '518202' 'id' => '518202'
], ],
26 => (object) [ 27 => (object) [
'type' => 'divider', 'type' => 'divider',
'text' => '$Organization', 'text' => '$Organization',
'id' => '566592' 'id' => '566592'
], ],
27 => 'User', 28 => 'User',
28 => (object) [ 29 => (object) [
'type' => 'divider', 'type' => 'divider',
'text' => NULL, 'text' => NULL,
'id' => '898671' 'id' => '898671'
], ],
29 => 'Team', 30 => 'Team',
30 => 'WorkingTimeCalendar', 31 => 'WorkingTimeCalendar',
31 => 'EmailTemplate', 32 => 'EmailTemplate',
32 => 'Template', 33 => 'Template',
33 => 'Import', 34 => 'Import',
34 => 'GlobalStream', 35 => 'GlobalStream',
35 => 'Report', 36 => 'Report',
36 => 'CCallQueues', 37 => 'CCallQueues',
37 => 'CAdvowareAkten',
38 => 'CAIKnowledge' 38 => 'CAIKnowledge'
], ],
'quickCreateList' => [ 'quickCreateList' => [
@@ -360,7 +360,7 @@ return [
0 => 'youtube.com', 0 => 'youtube.com',
1 => 'google.com' 1 => 'google.com'
], ],
'microtime' => 1774483768.956072, 'microtime' => 1774486498.79796,
'siteUrl' => 'https://crm.bitbylaw.com', 'siteUrl' => 'https://crm.bitbylaw.com',
'fullTextSearchMinLength' => 4, 'fullTextSearchMinLength' => 4,
'webSocketUrl' => 'ws://api.bitbylaw.com:5000/espocrm/ws', 'webSocketUrl' => 'ws://api.bitbylaw.com:5000/espocrm/ws',

View File

@@ -1,7 +1,7 @@
<?php <?php
return [ return [
'cacheTimestamp' => 1774483768, 'cacheTimestamp' => 1774486498,
'microtimeState' => 1774483768.959732, 'microtimeState' => 1774486498.980586,
'currencyRates' => [ 'currencyRates' => [
'EUR' => 1.0 'EUR' => 1.0
], ],