Refactor localization and remove CAIKnowledge entity

- Removed CAIKnowledge localization files for various languages (el_GR, en_GB, en_US, es_ES, es_MX, fa_IR, fr_FR, hr_HR, hu_HU, id_ID, it_IT, ja_JP, lt_LT, lv_LV, nb_NO, nl_NL, pl_PL, pt_BR, pt_PT, ro_RO, ru_RU, sk_SK, sl_SI, sr_RS, sv_SE, th_TH, tr_TR, uk_UA, ur_IN, vi_VN, zh_CN, zh_TW).
- Deleted related layout and metadata files for CAIKnowledge.
- Removed references to CAIKnowledge in existing metadata definitions for CDokumente, CMietinkasso, and CVmhRumungsklage.
- Updated config and state files to reflect the removal of CAIKnowledge.
- Cleaned up unused localization keys in existing JSON files.
This commit is contained in:
2026-03-26 15:40:07 +01:00
parent 5a61bd550c
commit 260186d148
60 changed files with 35 additions and 753 deletions

View File

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

View File

@@ -6,57 +6,46 @@ use Espo\ORM\Repository\Option\SaveOptions;
use Espo\Core\Hook\Hook\AfterSave;
/**
* Hook: Bei Änderung eines Dokuments wird syncStatus auf "unclean" gesetzt
* und alle verknüpften AIKnowledge Junction-Table-Einträge werden aktualisiert
* Hook: Bei Änderung eines Dokuments syncStatus und aiSyncStatus auf "unclean" setzen
* und die verknüpfte CAkten-Entity aktualisieren.
*/
class UpdateJunctionSyncStatus implements AfterSave
{
public function __construct(
private \Espo\ORM\EntityManager $entityManager
) {}
public function afterSave(Entity $entity, SaveOptions $options): void
{
// Überspringe bei Create (nur bei Update)
if ($entity->isNew()) {
return;
}
// Überspringe, wenn keine relevanten Felder geändert wurden
if (!$this->hasRelevantChanges($entity)) {
return;
}
if (!$entity->get('cAktenId')) {
return;
}
try {
// Set syncStatus = 'unclean' directly on CDokumente entity
// (only if it has an AdvowareAkte linked)
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('CAkten', $entity->get('cAktenId'));
if ($akte) {
// Just touch the entity to trigger beforeSave hook
$this->entityManager->saveEntity($akte, ['silent' => true]);
}
$entity->set('syncStatus', 'unclean');
$entity->set('aiSyncStatus', 'unclean');
$this->entityManager->saveEntity($entity, ['silent' => true, 'skipHooks' => true]);
// Akte triggern → BeforeSave-Hook UpdateLastSyncFromDocuments aggregiert Status
$akte = $this->entityManager->getEntityById('CAkten', $entity->get('cAktenId'));
if ($akte) {
$this->entityManager->saveEntity($akte, ['silent' => true]);
}
// Update AIKnowledge Junction-Tables (unchanged)
$this->updateAIKnowledgeJunctions($entity);
} catch (\Exception $e) {
// Fehler loggen, aber nicht werfen (um Save nicht zu blockieren)
$GLOBALS['log']->error('CDokumente UpdateJunctionSyncStatus Hook Error: ' . $e->getMessage());
}
}
/**
* Prüft ob relevante Felder geändert wurden
*/
private function hasRelevantChanges(Entity $entity): bool
{
// Relevante Felder für Sync-Status
$relevantFields = [
'name',
'description',
@@ -64,59 +53,15 @@ class UpdateJunctionSyncStatus implements AfterSave
'dokumentId',
'preview',
'previewId',
'fileStatus'
'fileStatus',
];
foreach ($relevantFields as $field) {
if ($entity->isAttributeChanged($field)) {
return true;
}
}
return false;
}
/**
* Update AIKnowledge Junction-Tables
*/
private function updateAIKnowledgeJunctions(Entity $entity): void
{
$updateQuery = $this->entityManager->getQueryBuilder()
->update()
->in('CAIKnowledgeDokumente')
->set(['syncstatus' => 'unclean'])
->where([
'cDokumenteId' => $entity->getId(),
'deleted' => false
])
->build();
$this->entityManager->getQueryExecutor()->execute($updateQuery);
// Hole alle betroffenen AIKnowledge IDs
$selectQuery = $this->entityManager->getQueryBuilder()
->select(['cAIKnowledgeId'])
->from('CAIKnowledgeDokumente')
->where([
'cDokumenteId' => $entity->getId(),
'deleted' => false
])
->build();
$pdoStatement = $this->entityManager->getQueryExecutor()->execute($selectQuery);
$rows = $pdoStatement->fetchAll(\PDO::FETCH_ASSOC);
// Trigger Update auf jeder AIKnowledge (um CheckGlobalSyncStatus Hook auszulösen)
foreach ($rows as $row) {
$knowledgeId = $row['cAIKnowledgeId'] ?? null;
if ($knowledgeId) {
$knowledge = $this->entityManager->getEntity('CAIKnowledge', $knowledgeId);
if ($knowledge) {
// Force Update ohne Hook-Loop
$knowledge->set('syncStatus', 'unclean');
$this->entityManager->saveEntity($knowledge, ['silent' => true, 'skipHooks' => true]);
}
}
}
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "إنشاء {الكيانTypeTranslated}"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Създаване на AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Vytvořit AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Opret AI Knowledge "
}
}

View File

@@ -1,49 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "AI Knowledge erstellen"
},
"fields": {
"dokumentes": "Dokumente",
"vmhRumungsklage": "Räumungsklage",
"mietinkasso": "Mietinkasso",
"datenbankId": "Datenbank-ID",
"syncStatus": "Sync-Status",
"lastSync": "Letzte Synchronisation",
"aktivierungsstatus": "Aktivierungsstatus",
"dokumenteAiDocumentId": "AI Document ID",
"dokumenteSyncstatus": "Sync-Status",
"dokumenteLastSync": "Letzter Sync",
"dokumenteSyncedHash": "Sync-Hash"
},
"links": {
"dokumentes": "Dokumente",
"vmhRumungsklage": "Räumungsklage",
"mietinkasso": "Mietinkasso"
},
"options": {
"syncStatus": {
"synced": "Synchronisiert",
"unclean": "Nicht synchronisiert",
"pending_sync": "Synchronisierung ausstehend"
},
"aktivierungsstatus": {
"new": "Neu",
"active": "Aktiv",
"paused": "Pausiert",
"deactivated": "Deaktiviert"
},
"dokumenteSyncstatus": {
"new": "Neu",
"unclean": "Nicht synchronisiert",
"synced": "Synchronisiert",
"failed": "Fehlgeschlagen",
"unsupported": "Nicht unterstützt"
}
},
"tooltips": {
"syncStatus": "Globaler Synchronisationsstatus: synced = Alle Dokumente synchronisiert, unclean = Mindestens ein Dokument ist neu oder hat Änderungen, pending_sync = Synchronisierung wurde gestartet aber noch nicht abgeschlossen. Wird automatisch basierend auf den Dokumenten-Status aktualisiert.",
"lastSync": "Zeitpunkt der letzten erfolgreichen Synchronisation aller Dokumente",
"aktivierungsstatus": "Aktivierungsstatus des AI Knowledge Entries: new = Neu angelegt, active = Aktiv synchronisiert, paused = Synchronisation pausiert, deactivated = Synchronisation deaktiviert",
"datenbankId": "Eindeutige ID in der AI-Datenbank"
}
}

View File

@@ -20,7 +20,6 @@
"mietobjekt2dokumente": "Mietobjekte",
"mietinkassosdokumente": "Mietinkasso",
"kndigungensdokumente": "Kündigungen",
"aIKnowledges": "AI Knowledge",
"aiKnowledgeAiDocumentId": "AI Document ID",
"aiKnowledgeSyncstatus": "AI Sync-Status",
"aiKnowledgeLastSync": "AI Letzter Sync",
@@ -43,7 +42,6 @@
"mietobjekt2dokumente": "Mietobjekte",
"mietinkassosdokumente": "Mietinkasso",
"kndigungensdokumente": "Kündigungen",
"aIKnowledges": "AI Knowledge",
"cAkten": "Akte"
},
"labels": {

View File

@@ -13,8 +13,7 @@
"freigeschalteteNutzer": "Freigeschaltete Nutzer (veraltet)",
"collaborators": "Mitarbeiter",
"vmhVermietersMIK": "Vermieter",
"advowareAkten": "Advoware Akten",
"aIKnowledge": "AI Knowledge"
"advowareAkten": "Advoware Akten"
},
"links": {
"meetings": "Termine",
@@ -29,8 +28,7 @@
"collaborators": "Mitarbeiter",
"vmhVermietersMIK": "Vermieter",
"pulse": "Pulse",
"advowareAkten": "Advoware Akten",
"aIKnowledge": "AI Knowledge"
"advowareAkten": "Advoware Akten"
},
"labels": {
"Create CMietinkasso": "Mietinkasso erstellen"

View File

@@ -15,8 +15,7 @@
"freigeschalteteNutzer": "Freigeschaltete Nutzer (veraltet)",
"collaborators": "Mitarbeiter",
"vmhVermietersRKL": "Vermieter",
"advowareAkten": "Advoware Akten",
"aIKnowledge": "AI Knowledge"
"advowareAkten": "Advoware Akten"
},
"links": {
"meetings": "Termine",
@@ -32,8 +31,7 @@
"collaborators": "Mitarbeiter",
"vmhVermietersRKL": "Vermieter",
"pulse": "Pulse",
"advowareAkten": "Advoware Akten",
"aIKnowledge": "AI Knowledge"
"advowareAkten": "Advoware Akten"
},
"labels": {
"Create CVmhRumungsklage": "Räumungsklage erstellen"

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Δημιουργία AI Knowledge"
}
}

View File

@@ -1,49 +0,0 @@
{
"fields": {
"dokumentes": "Dokumente",
"vmhRumungsklage": "Räumungsklage",
"mietinkasso": "Mietinkasso",
"datenbankId": "Database ID",
"syncStatus": "Sync Status",
"lastSync": "Last Synchronization",
"aktivierungsstatus": "Activation Status",
"dokumenteAiDocumentId": "AI Document ID",
"dokumenteSyncstatus": "Sync Status",
"dokumenteLastSync": "Last Sync",
"dokumenteSyncedHash": "Sync Hash"
},
"links": {
"dokumentes": "Dokumente",
"vmhRumungsklage": "Räumungsklage",
"mietinkasso": "Mietinkasso"
},
"labels": {
"Create CAIKnowledge": "Create AI Knowledge"
},
"options": {
"syncStatus": {
"synced": "Synchronized",
"unclean": "Not Synchronized",
"pending_sync": "Synchronization Pending"
},
"aktivierungsstatus": {
"new": "New",
"active": "Active",
"paused": "Paused",
"deactivated": "Deactivated"
},
"dokumenteSyncstatus": {
"new": "New",
"unclean": "Not Synchronized",
"synced": "Synchronized",
"failed": "Failed",
"unsupported": "Unsupported"
}
},
"tooltips": {
"syncStatus": "Global synchronization status: synced = All documents synchronized, unclean = At least one document is new or has changes, pending_sync = Synchronization started but not yet completed. Updated automatically based on document status.",
"lastSync": "Timestamp of the last successful synchronization of all documents",
"aktivierungsstatus": "Activation status of the AI Knowledge entry: new = Newly created, active = Actively synchronized, paused = Synchronization paused, deactivated = Synchronization deactivated",
"datenbankId": "Unique ID in the AI database"
}
}

View File

@@ -20,7 +20,6 @@
"mietobjekt2dokumente": "Properties",
"mietinkassosdokumente": "Rent Collection",
"kndigungensdokumente": "Terminations",
"aIKnowledges": "AI Knowledge",
"aiKnowledgeAiDocumentId": "AI Document ID",
"aiKnowledgeSyncstatus": "AI Sync Status",
"aiKnowledgeLastSync": "AI Last Sync",
@@ -43,7 +42,6 @@
"mietobjekt2dokumente": "Properties",
"mietinkassosdokumente": "Rent Collection",
"kndigungensdokumente": "Terminations",
"aIKnowledges": "AI Knowledge",
"cAkten": "File"
},
"labels": {

View File

@@ -13,8 +13,7 @@
"freigeschalteteNutzer": "Activated Users (deprecated)",
"collaborators": "Collaborators",
"vmhVermietersMIK": "Landlord",
"advowareAkten": "Advoware Akten",
"aIKnowledge": "AI Knowledge"
"advowareAkten": "Advoware Akten"
},
"links": {
"meetings": "Meetings",
@@ -29,8 +28,7 @@
"collaborators": "Collaborators",
"vmhVermietersMIK": "Landlord",
"pulse": "Pulses",
"advowareAkten": "Advoware Akten",
"aIKnowledge": "AI Knowledge"
"advowareAkten": "Advoware Akten"
},
"labels": {
"Create CMietinkasso": "Create Mietinkasso"

View File

@@ -13,8 +13,7 @@
"aussergerichtlicheGebuehren13": "Out-of-Court Fees 1.3",
"gerichtskosten1Instanz": "Court Costs 1st Instance",
"anwaltskosten1Instanz": "Attorney Fees 1st Instance",
"advowareAkten": "Advoware Akten",
"aIKnowledge": "AI Knowledge"
"advowareAkten": "Advoware Akten"
},
"links": {
"meetings": "Meetings",
@@ -30,8 +29,7 @@
"klaeger": "Plaintiff",
"contactsRumungsklage": "Portal Users",
"pulse": "Pulses",
"advowareAkten": "Advoware Akten",
"aIKnowledge": "AI Knowledge"
"advowareAkten": "Advoware Akten"
},
"labels": {
"Create CVmhRumungsklage": "Create Räumungsklage"

View File

@@ -15,8 +15,7 @@
"CMietinkasso": "Mietinkasso",
"CKuendigung": "Kündigung",
"CPuls": "Puls",
"CAkten": "Akten",
"CAIKnowledge": "AI Knowledge"
"CAkten": "Akten"
},
"scopeNamesPlural": {
"CVmhMietverhltnis": "Mietverhältnisse",
@@ -34,7 +33,6 @@
"CMietinkasso": "Mietinkassa",
"CKuendigung": "Kündigungen",
"CPuls": "Pulse",
"CAkten": "Akten",
"CAIKnowledge": "AI Knowledge"
"CAkten": "Akten"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Crear AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Crear AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "ایجاد AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Créer un AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Napravi AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "{EntityTypeTranslated} létrehozása"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Buat AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Crea AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "AI Knowledge を作成する"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Sukurti AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Izveidot AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Opprett AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Creëer AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Utwórz AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Criar AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Criar AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Creare AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Создать AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Vytvoriť AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Ustvari AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Napravi AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Skapa AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "สร้าง AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "AI Knowledge oluştur"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Створити AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "{entityTypetranslated} بنائیں"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "Tạo AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "创建 AI Knowledge"
}
}

View File

@@ -1,5 +0,0 @@
{
"labels": {
"Create CAIKnowledge": "建立AI Knowledge"
}
}

View File

@@ -1,22 +0,0 @@
{
"_delimiter_": {
"disabled": true
},
"_tabBreak_0": {
"index": 0,
"tabBreak": true,
"tabLabel": "Dokumente"
},
"dokumentes": {
"index": 1
},
"_tabBreak_1": {
"index": 2,
"tabBreak": true,
"tabLabel": "Ereignisse"
},
"stream": {
"sticked": false,
"index": 3
}
}

View File

@@ -1,27 +0,0 @@
[
{
"rows": [
[
{
"name": "name"
},
{
"name": "datenbankId"
}
],
[
{
"name": "aktivierungsstatus"
},
{
"name": "syncStatus"
},
{
"name": "lastSync"
}
]
],
"style": "default",
"label": "Overview"
}
]

View File

@@ -1,30 +0,0 @@
{
"controller": "controllers/record",
"boolFilterList": [
"onlyMy"
],
"bottomPanels": {
"detail": [
{
"name": "stream",
"label": "Ereignisse",
"reference": "stream",
"stacked": false
}
]
},
"relationshipPanels": {
"dokumentes": {
"layout": "listForAIKnowledge",
"selectPrimaryFilterName": null
},
"vmhRumungsklage": {
"layout": null,
"selectPrimaryFilterName": null
},
"mietinkasso": {
"layout": null,
"selectPrimaryFilterName": null
}
}
}

View File

@@ -46,10 +46,6 @@
"mietobjekt2dokumente": {
"layout": null,
"selectPrimaryFilterName": null
},
"aIKnowledges": {
"layout": null,
"selectPrimaryFilterName": null
}
},
"kanbanViewMode": false,

View File

@@ -44,10 +44,6 @@
"advowareAkten": {
"layout": null,
"selectPrimaryFilterName": null
},
"aIKnowledge": {
"layout": null,
"selectPrimaryFilterName": null
}
}
}

View File

@@ -72,10 +72,6 @@
"advowareAkten": {
"layout": null,
"selectPrimaryFilterName": null
},
"aIKnowledge": {
"layout": null,
"selectPrimaryFilterName": null
}
},
"kanbanViewMode": false,

View File

@@ -1,224 +0,0 @@
{
"fields": {
"name": {
"type": "varchar",
"required": true,
"pattern": "$noBadCharacters"
},
"description": {
"type": "text"
},
"createdAt": {
"type": "datetime",
"readOnly": true
},
"modifiedAt": {
"type": "datetime",
"readOnly": true
},
"createdBy": {
"type": "link",
"readOnly": true,
"view": "views/fields/user"
},
"modifiedBy": {
"type": "link",
"readOnly": true,
"view": "views/fields/user"
},
"assignedUser": {
"type": "link",
"required": false,
"view": "views/fields/assigned-user"
},
"teams": {
"type": "linkMultiple",
"view": "views/fields/teams"
},
"vmhRumungsklage": {
"type": "link"
},
"mietinkasso": {
"type": "link"
},
"datenbankId": {
"type": "varchar",
"maxLength": 100,
"tooltip": true,
"isCustom": true
},
"syncStatus": {
"type": "enum",
"required": false,
"options": [
"synced",
"unclean",
"pending_sync"
],
"style": {
"synced": "success",
"unclean": "warning",
"pending_sync": "info"
},
"default": "unclean",
"tooltip": true,
"isCustom": true
},
"lastSync": {
"type": "datetime",
"required": false,
"readOnly": true,
"tooltip": true,
"isCustom": true
},
"aktivierungsstatus": {
"type": "enum",
"required": false,
"options": [
"new",
"active",
"paused",
"deactivated"
],
"style": {
"new": "primary",
"active": "success",
"paused": "warning",
"deactivated": "danger"
},
"default": "new",
"tooltip": true,
"isCustom": true
},
"dokumenteAiDocumentId": {
"type": "varchar",
"notStorable": true,
"utility": true
},
"dokumenteSyncstatus": {
"type": "enum",
"options": ["new", "unclean", "synced", "failed", "unsupported"],
"notStorable": true,
"utility": true
},
"dokumenteLastSync": {
"type": "datetime",
"notStorable": true,
"utility": true
},
"dokumenteSyncedHash": {
"type": "varchar",
"notStorable": true,
"utility": true
},
"dokumentes": {
"type": "linkMultiple",
"layoutDetailDisabled": false,
"layoutMassUpdateDisabled": false,
"layoutListDisabled": false,
"noLoad": false,
"importDisabled": false,
"exportDisabled": false,
"customizationDisabled": false,
"columns": {
"aiDocumentId": "aiKnowledgeAiDocumentId",
"syncstatus": "aiKnowledgeSyncstatus",
"lastSync": "aiKnowledgeLastSync",
"syncedHash": "aiKnowledgeSyncedHash"
},
"additionalAttributeList": [
"columns"
],
"view": "views/fields/link-multiple-with-columns",
"isCustom": true
}
},
"links": {
"createdBy": {
"type": "belongsTo",
"entity": "User"
},
"modifiedBy": {
"type": "belongsTo",
"entity": "User"
},
"assignedUser": {
"type": "belongsTo",
"entity": "User"
},
"teams": {
"type": "hasMany",
"entity": "Team",
"relationName": "entityTeam",
"layoutRelationshipsDisabled": true
},
"dokumentes": {
"type": "hasMany",
"relationName": "cAIKnowledgeDokumente",
"foreign": "aIKnowledges",
"entity": "CDokumente",
"audited": false,
"isCustom": true,
"additionalColumns": {
"aiDocumentId": {
"type": "varchar",
"len": 255
},
"syncstatus": {
"type": "varchar",
"len": 20
},
"lastSync": {
"type": "datetime"
}
},
"columnAttributeMap": {
"aiDocumentId": "dokumenteAiDocumentId",
"syncstatus": "dokumenteSyncstatus",
"lastSync": "dokumenteLastSync"
}
},
"vmhRumungsklage": {
"type": "belongsTo",
"foreign": "aIKnowledge",
"entity": "CVmhRumungsklage",
"isCustom": true
},
"mietinkasso": {
"type": "belongsTo",
"foreign": "aIKnowledge",
"entity": "CMietinkasso",
"isCustom": true
}
},
"collection": {
"orderBy": "createdAt",
"order": "desc"
},
"indexes": {
"name": {
"columns": [
"name",
"deleted"
]
},
"assignedUser": {
"columns": [
"assignedUserId",
"deleted"
]
},
"createdAt": {
"columns": [
"createdAt"
]
},
"createdAtId": {
"unique": true,
"columns": [
"createdAt",
"id"
]
}
}
}

View File

@@ -316,19 +316,6 @@
"audited": false,
"isCustom": true
},
"aIKnowledges": {
"type": "hasMany",
"relationName": "cAIKnowledgeDokumente",
"foreign": "dokumentes",
"entity": "CAIKnowledge",
"audited": true,
"isCustom": true,
"columnAttributeMap": {
"aiDocumentId": "aiKnowledgeAiDocumentId",
"syncstatus": "aiKnowledgeSyncstatus",
"lastSync": "aiKnowledgeLastSync"
}
},
"cAkten": {
"type": "belongsTo",
"foreign": "dokumentes",

View File

@@ -84,9 +84,6 @@
},
"advowareAkten": {
"type": "linkOne"
},
"aIKnowledge": {
"type": "linkOne"
}
},
"links": {
@@ -201,12 +198,6 @@
"foreign": "mietinkasso",
"entity": "CAkten",
"isCustom": true
},
"aIKnowledge": {
"type": "hasOne",
"foreign": "mietinkasso",
"entity": "CAIKnowledge",
"isCustom": true
}
},
"collection": {

View File

@@ -89,9 +89,6 @@
},
"advowareAkten": {
"type": "linkOne"
},
"aIKnowledge": {
"type": "linkOne"
}
},
"links": {
@@ -214,12 +211,6 @@
"foreign": "vmhRumungsklage",
"entity": "CAkten",
"isCustom": true
},
"aIKnowledge": {
"type": "hasOne",
"foreign": "vmhRumungsklage",
"entity": "CAIKnowledge",
"isCustom": true
}
},
"collection": {

View File

@@ -1,3 +0,0 @@
{
"duplicateWhereBuilderClassName": "Espo\\Classes\\DuplicateWhereBuilders\\General"
}

View File

@@ -1,23 +0,0 @@
{
"entity": true,
"layouts": true,
"tab": true,
"acl": true,
"aclPortal": true,
"aclPortalLevelList": [
"all",
"account",
"contact",
"own",
"no"
],
"customizable": true,
"importable": true,
"notifications": true,
"stream": true,
"disabled": false,
"type": "Base",
"module": "Custom",
"object": true,
"isCustom": true
}