Remove CAIKnowledge related hooks, controllers, localization files, and metadata definitions; update microtime values in config and state files
This commit is contained in:
@@ -1,24 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Espo\Custom\Controllers;
|
|
||||||
|
|
||||||
use Espo\Core\Controllers\Record;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Junction Controller: CAIKnowledge ↔ CDokumente
|
|
||||||
*
|
|
||||||
* Provides REST API access to the junction table with additionalColumns:
|
|
||||||
* - aiDocumentId: External AI document reference
|
|
||||||
* - syncstatus: Sync state tracking (new, unclean, synced, failed)
|
|
||||||
* - lastSync: Last synchronization timestamp
|
|
||||||
*/
|
|
||||||
class CAIKnowledgeCDokumente extends Record
|
|
||||||
{
|
|
||||||
// Inherits all CRUD operations from Record controller
|
|
||||||
//
|
|
||||||
// Available endpoints:
|
|
||||||
// GET /api/v1/CAIKnowledgeCDokumente
|
|
||||||
// GET /api/v1/CAIKnowledgeCDokumente/{id}
|
|
||||||
// POST /api/v1/CAIKnowledgeCDokumente
|
|
||||||
// PUT /api/v1/CAIKnowledgeCDokumente/{id}
|
|
||||||
// DELETE /api/v1/CAIKnowledgeCDokumente/{id}
|
|
||||||
}
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Espo\Custom\Hooks\CAIKnowledge;
|
|
||||||
|
|
||||||
use Espo\ORM\Entity;
|
|
||||||
use Espo\ORM\Repository\Option\SaveOptions;
|
|
||||||
use Espo\Core\Hook\Hook\BeforeSave;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hook: Prüft Junction-Table und aktualisiert globalen syncStatus
|
|
||||||
* basierend auf den syncstatus-Werten der verknüpften Dokumente
|
|
||||||
*/
|
|
||||||
class CheckGlobalSyncStatus implements BeforeSave
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private \Espo\ORM\EntityManager $entityManager
|
|
||||||
) {}
|
|
||||||
|
|
||||||
public function beforeSave(Entity $entity, SaveOptions $options): void
|
|
||||||
{
|
|
||||||
// Überspringe, wenn skipHooks gesetzt ist (verhindert Loops)
|
|
||||||
if ($options->get('skipHooks')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Nur wenn Entity bereits existiert (nicht bei Create)
|
|
||||||
if ($entity->isNew()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Hole alle verknüpften Dokumente mit ihren syncstatus-Werten aus der Junction-Tabelle
|
|
||||||
$query = $this->entityManager->getQueryBuilder()
|
|
||||||
->select(['syncstatus'])
|
|
||||||
->from('CAIKnowledgeDokumente')
|
|
||||||
->where([
|
|
||||||
'cAIKnowledgeId' => $entity->getId(),
|
|
||||||
'deleted' => false
|
|
||||||
])
|
|
||||||
->build();
|
|
||||||
|
|
||||||
$pdoStatement = $this->entityManager->getQueryExecutor()->execute($query);
|
|
||||||
$rows = $pdoStatement->fetchAll(\PDO::FETCH_ASSOC);
|
|
||||||
|
|
||||||
// Wenn keine Dokumente verknüpft, setze auf "unclean"
|
|
||||||
if (empty($rows)) {
|
|
||||||
$entity->set('syncStatus', 'unclean');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prüfe, ob irgendein Dokument "new" oder "unclean" ist
|
|
||||||
$hasUnsynced = false;
|
|
||||||
foreach ($rows as $row) {
|
|
||||||
$status = $row['syncstatus'] ?? null;
|
|
||||||
if ($status === 'new' || $status === 'unclean' || $status === null || $status === '') {
|
|
||||||
$hasUnsynced = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setze globalen Status
|
|
||||||
if ($hasUnsynced) {
|
|
||||||
$entity->set('syncStatus', 'unclean');
|
|
||||||
} else {
|
|
||||||
// Alle Dokumente sind "synced"
|
|
||||||
$entity->set('syncStatus', 'synced');
|
|
||||||
$entity->set('lastSync', date('Y-m-d H:i:s'));
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
// Bei Fehler loggen und Status auf "unclean" setzen
|
|
||||||
$GLOBALS['log']->error('CAIKnowledge CheckGlobalSyncStatus Hook Error: ' . $e->getMessage());
|
|
||||||
$entity->set('syncStatus', 'unclean');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Espo\Custom\Hooks\CAIKnowledge;
|
|
||||||
|
|
||||||
use Espo\ORM\Entity;
|
|
||||||
use Espo\Core\Hook\Hook\AfterRelate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hook: Setzt Dokument-Sync-Status auf "new" beim Verknüpfen und
|
|
||||||
* globalen syncStatus auf "unclean"
|
|
||||||
*/
|
|
||||||
class DokumenteSyncStatus implements AfterRelate
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private \Espo\ORM\EntityManager $entityManager
|
|
||||||
) {}
|
|
||||||
|
|
||||||
public function afterRelate(
|
|
||||||
Entity $entity,
|
|
||||||
string $relationName,
|
|
||||||
Entity $foreignEntity,
|
|
||||||
array $columnData,
|
|
||||||
\Espo\ORM\Repository\Option\RelateOptions $options
|
|
||||||
): void {
|
|
||||||
// Nur für dokumentes-Beziehung
|
|
||||||
if ($relationName !== 'dokumentes') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setze Sync-Status des Dokuments in der Junction-Tabelle auf "new"
|
|
||||||
$repository = $this->entityManager->getRDBRepository('CAIKnowledge');
|
|
||||||
|
|
||||||
try {
|
|
||||||
$repository->getRelation($entity, 'dokumentes')->updateColumns(
|
|
||||||
$foreignEntity,
|
|
||||||
['syncstatus' => 'new']
|
|
||||||
);
|
|
||||||
|
|
||||||
// Setze globalen syncStatus auf "unclean"
|
|
||||||
$entity->set('syncStatus', 'unclean');
|
|
||||||
$this->entityManager->saveEntity($entity, ['silent' => true, 'skipHooks' => true]);
|
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
// Fehler loggen, aber nicht werfen (um Verknüpfung nicht zu blockieren)
|
|
||||||
$GLOBALS['log']->error('CAIKnowledge DokumenteSyncStatus Hook Error: ' . $e->getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,182 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Espo\Custom\Hooks\CAIKnowledge;
|
|
||||||
|
|
||||||
use Espo\ORM\Entity;
|
|
||||||
use Espo\Core\Hook\Hook\AfterRelate;
|
|
||||||
use Espo\Core\Hook\Hook\AfterUnrelate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hook: Propagiert Dokumenten-Verknüpfungen von AIKnowledge nach oben zu Räumungsklage/Mietinkasso
|
|
||||||
*
|
|
||||||
* Wenn Dokument mit AIKnowledge verknüpft wird:
|
|
||||||
* → verknüpfe mit verbundener Räumungsklage/Mietinkasso
|
|
||||||
* → von dort propagiert es automatisch zu AdvowareAkten (via deren Hooks)
|
|
||||||
*
|
|
||||||
* Wenn Dokument von AIKnowledge entknüpft wird:
|
|
||||||
* → entknüpfe von verbundener Räumungsklage/Mietinkasso
|
|
||||||
* → von dort propagiert es automatisch von AdvowareAkten (via deren Hooks)
|
|
||||||
*/
|
|
||||||
class PropagateDocumentsUp implements AfterRelate, AfterUnrelate
|
|
||||||
{
|
|
||||||
private static array $processing = [];
|
|
||||||
|
|
||||||
public function __construct(
|
|
||||||
private \Espo\ORM\EntityManager $entityManager
|
|
||||||
) {}
|
|
||||||
|
|
||||||
public function afterRelate(
|
|
||||||
Entity $entity,
|
|
||||||
string $relationName,
|
|
||||||
Entity $foreignEntity,
|
|
||||||
array $columnData,
|
|
||||||
\Espo\ORM\Repository\Option\RelateOptions $options
|
|
||||||
): void {
|
|
||||||
// Nur für dokumentes-Beziehung
|
|
||||||
if ($relationName !== 'dokumentes') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Vermeide Loops
|
|
||||||
$key = $entity->getId() . '-' . $foreignEntity->getId() . '-relate';
|
|
||||||
if (isset(self::$processing[$key])) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
self::$processing[$key] = true;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Prüfe ob Räumungsklage verknüpft ist
|
|
||||||
$raumungsklage = $this->entityManager
|
|
||||||
->getRDBRepository('CAIKnowledge')
|
|
||||||
->getRelation($entity, 'vmhRumungsklage')
|
|
||||||
->findOne();
|
|
||||||
|
|
||||||
if ($raumungsklage) {
|
|
||||||
$this->relateDocument($raumungsklage, 'dokumentesvmhraumungsklage', $foreignEntity);
|
|
||||||
|
|
||||||
// Also link to AdvowareAkte if Räumungsklage has one
|
|
||||||
$advowareAkte = $this->entityManager
|
|
||||||
->getRDBRepository('CVmhRumungsklage')
|
|
||||||
->getRelation($raumungsklage, 'advowareAkten')
|
|
||||||
->findOne();
|
|
||||||
|
|
||||||
if ($advowareAkte && !$foreignEntity->get('cAktenId')) {
|
|
||||||
$foreignEntity->set('cAktenId', $advowareAkte->getId());
|
|
||||||
$foreignEntity->set('syncStatus', 'new');
|
|
||||||
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prüfe ob Mietinkasso verknüpft ist
|
|
||||||
$mietinkasso = $this->entityManager
|
|
||||||
->getRDBRepository('CAIKnowledge')
|
|
||||||
->getRelation($entity, 'mietinkasso')
|
|
||||||
->findOne();
|
|
||||||
|
|
||||||
if ($mietinkasso) {
|
|
||||||
$this->relateDocument($mietinkasso, 'dokumentesmietinkasso', $foreignEntity);
|
|
||||||
|
|
||||||
// Also link to AdvowareAkte if Mietinkasso has one
|
|
||||||
$advowareAkte = $this->entityManager
|
|
||||||
->getRDBRepository('CMietinkasso')
|
|
||||||
->getRelation($mietinkasso, 'advowareAkten')
|
|
||||||
->findOne();
|
|
||||||
|
|
||||||
if ($advowareAkte && !$foreignEntity->get('cAktenId')) {
|
|
||||||
$foreignEntity->set('cAktenId', $advowareAkte->getId());
|
|
||||||
$foreignEntity->set('syncStatus', 'new');
|
|
||||||
$this->entityManager->saveEntity($foreignEntity, ['silent' => true, 'skipHooks' => true]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
$GLOBALS['log']->error('CAIKnowledge PropagateDocumentsUp (relate) Error: ' . $e->getMessage());
|
|
||||||
} finally {
|
|
||||||
unset(self::$processing[$key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function afterUnrelate(
|
|
||||||
Entity $entity,
|
|
||||||
string $relationName,
|
|
||||||
Entity $foreignEntity,
|
|
||||||
\Espo\ORM\Repository\Option\UnrelateOptions $options
|
|
||||||
): void {
|
|
||||||
// Nur für dokumentes-Beziehung
|
|
||||||
if ($relationName !== 'dokumentes') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Vermeide Loops
|
|
||||||
$key = $entity->getId() . '-' . $foreignEntity->getId() . '-unrelate';
|
|
||||||
if (isset(self::$processing[$key])) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
self::$processing[$key] = true;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Prüfe ob Räumungsklage verknüpft ist
|
|
||||||
$raumungsklage = $this->entityManager
|
|
||||||
->getRDBRepository('CAIKnowledge')
|
|
||||||
->getRelation($entity, 'vmhRumungsklage')
|
|
||||||
->findOne();
|
|
||||||
|
|
||||||
if ($raumungsklage) {
|
|
||||||
$this->unrelateDocument($raumungsklage, 'dokumentesvmhraumungsklage', $foreignEntity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prüfe ob Mietinkasso verknüpft ist
|
|
||||||
$mietinkasso = $this->entityManager
|
|
||||||
->getRDBRepository('CAIKnowledge')
|
|
||||||
->getRelation($entity, 'mietinkasso')
|
|
||||||
->findOne();
|
|
||||||
|
|
||||||
if ($mietinkasso) {
|
|
||||||
$this->unrelateDocument($mietinkasso, 'dokumentesmietinkasso', $foreignEntity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Note: We don't remove cAktenId on unrelate from AIKnowledge
|
|
||||||
// because the document might still be linked to Räumungsklage/Mietinkasso
|
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
$GLOBALS['log']->error('CAIKnowledge PropagateDocumentsUp (unrelate) 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hilfsfunktion: Entknüpfe Dokument
|
|
||||||
*/
|
|
||||||
private function unrelateDocument(Entity $parentEntity, string $relationName, Entity $document): void
|
|
||||||
{
|
|
||||||
$repository = $this->entityManager->getRDBRepository($parentEntity->getEntityType());
|
|
||||||
$relation = $repository->getRelation($parentEntity, $relationName);
|
|
||||||
|
|
||||||
// Prüfe ob verknüpft
|
|
||||||
$isRelated = $relation
|
|
||||||
->where(['id' => $document->getId()])
|
|
||||||
->findOne();
|
|
||||||
|
|
||||||
if ($isRelated) {
|
|
||||||
$relation->unrelate($document);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"fields": {
|
|
||||||
"cAIKnowledge": "AI Knowledge",
|
|
||||||
"cDokumente": "Dokument",
|
|
||||||
"aiDocumentId": "AI Dokument-ID",
|
|
||||||
"syncstatus": "Sync-Status",
|
|
||||||
"lastSync": "Letzte Synchronisation",
|
|
||||||
"syncedHash": "Sync-Hash"
|
|
||||||
},
|
|
||||||
"links": {
|
|
||||||
"cAIKnowledge": "AI Knowledge",
|
|
||||||
"cDokumente": "Dokument"
|
|
||||||
},
|
|
||||||
"labels": {
|
|
||||||
"Create CAIKnowledgeCDokumente": "Verknüpfung erstellen"
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"syncstatus": {
|
|
||||||
"new": "Neu",
|
|
||||||
"unclean": "Geändert",
|
|
||||||
"synced": "Synchronisiert",
|
|
||||||
"failed": "Fehler",
|
|
||||||
"unsupported": "Nicht unterstützt"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tooltips": {
|
|
||||||
"aiDocumentId": "Externe AI-Dokument-Referenz-ID",
|
|
||||||
"syncedHash": "Hash-Wert des zuletzt synchronisierten Dokument-Zustands"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"fields": {
|
|
||||||
"cAIKnowledge": "AI Knowledge",
|
|
||||||
"cDokumente": "Dokument",
|
|
||||||
"aiDocumentId": "AI Dokument-ID",
|
|
||||||
"syncstatus": "Sync-Status",
|
|
||||||
"lastSync": "Letzte Synchronisation",
|
|
||||||
"syncedHash": "Sync-Hash"
|
|
||||||
},
|
|
||||||
"links": {
|
|
||||||
"cAIKnowledge": "AI Knowledge",
|
|
||||||
"cDokumente": "Dokument"
|
|
||||||
},
|
|
||||||
"labels": {
|
|
||||||
"Create CAIKnowledgeCDokumente": "Verknüpfung erstellen"
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"syncstatus": {
|
|
||||||
"new": "Neu",
|
|
||||||
"unclean": "Geändert",
|
|
||||||
"synced": "Synchronisiert",
|
|
||||||
"failed": "Fehler",
|
|
||||||
"unsupported": "Nicht unterstützt"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tooltips": {
|
|
||||||
"aiDocumentId": "Externe AI-Dokument-Referenz-ID",
|
|
||||||
"syncedHash": "Hash-Wert des zuletzt synchronisierten Dokument-Zustands"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
"labels": {
|
|
||||||
"Create CAdvowareAktenCDokumente": "Advoware-Dokument-Verknüpfung erstellen",
|
|
||||||
"CAdvowareAktenCDokumente": "Advoware-Dokument-Verknüpfungen"
|
|
||||||
},
|
|
||||||
"fields": {
|
|
||||||
"cAdvowareAkten": "Advoware-Akte",
|
|
||||||
"cAdvowareAktenId": "Advoware-Akte ID",
|
|
||||||
"cDokumente": "Dokument",
|
|
||||||
"cDokumenteId": "Dokument ID",
|
|
||||||
"hnr": "HNR",
|
|
||||||
"syncStatus": "Sync-Status",
|
|
||||||
"syncedHash": "Sync-Hash",
|
|
||||||
"deleted": "Gelöscht"
|
|
||||||
},
|
|
||||||
"links": {
|
|
||||||
"cAdvowareAkten": "Advoware-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)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"fields": {
|
|
||||||
"cAIKnowledge": "AI Knowledge",
|
|
||||||
"cDokumente": "Document",
|
|
||||||
"aiDocumentId": "AI Document ID",
|
|
||||||
"syncstatus": "Sync Status",
|
|
||||||
"lastSync": "Last Sync",
|
|
||||||
"syncedHash": "Synced Hash"
|
|
||||||
},
|
|
||||||
"links": {
|
|
||||||
"cAIKnowledge": "AI Knowledge",
|
|
||||||
"cDokumente": "Document"
|
|
||||||
},
|
|
||||||
"labels": {
|
|
||||||
"Create CAIKnowledgeCDokumente": "Create Link"
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"syncstatus": {
|
|
||||||
"new": "New",
|
|
||||||
"unclean": "Changed",
|
|
||||||
"synced": "Synced",
|
|
||||||
"failed": "Failed",
|
|
||||||
"unsupported": "Unsupported"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tooltips": {
|
|
||||||
"aiDocumentId": "External AI document reference ID",
|
|
||||||
"syncedHash": "Hash value of last synced document state"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"fields": {
|
|
||||||
"cAIKnowledge": "AI Knowledge",
|
|
||||||
"cDokumente": "Document",
|
|
||||||
"aiDocumentId": "AI Document ID",
|
|
||||||
"syncstatus": "Sync Status",
|
|
||||||
"lastSync": "Last Sync",
|
|
||||||
"syncedHash": "Synced Hash"
|
|
||||||
},
|
|
||||||
"links": {
|
|
||||||
"cAIKnowledge": "AI Knowledge",
|
|
||||||
"cDokumente": "Document"
|
|
||||||
},
|
|
||||||
"labels": {
|
|
||||||
"Create CAIKnowledgeCDokumente": "Create Link"
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"syncstatus": {
|
|
||||||
"new": "New",
|
|
||||||
"unclean": "Changed",
|
|
||||||
"synced": "Synced",
|
|
||||||
"failed": "Failed",
|
|
||||||
"unsupported": "Unsupported"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tooltips": {
|
|
||||||
"aiDocumentId": "External AI document reference ID",
|
|
||||||
"syncedHash": "Hash value of last synced document state"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
"labels": {
|
|
||||||
"Create CAdvowareAktenCDokumente": "Create Advoware Document Link",
|
|
||||||
"CAdvowareAktenCDokumente": "Advoware Document Links"
|
|
||||||
},
|
|
||||||
"fields": {
|
|
||||||
"cAdvowareAkten": "Advoware File",
|
|
||||||
"cAdvowareAktenId": "Advoware File ID",
|
|
||||||
"cDokumente": "Document",
|
|
||||||
"cDokumenteId": "Document ID",
|
|
||||||
"hnr": "HNR",
|
|
||||||
"syncStatus": "Sync Status",
|
|
||||||
"syncedHash": "Sync Hash",
|
|
||||||
"deleted": "Deleted"
|
|
||||||
},
|
|
||||||
"links": {
|
|
||||||
"cAdvowareAkten": "Advoware 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)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
{
|
|
||||||
"table": "c_a_i_knowledge_dokumente",
|
|
||||||
"fields": {
|
|
||||||
"id": {
|
|
||||||
"type": "id",
|
|
||||||
"dbType": "bigint",
|
|
||||||
"autoincrement": true
|
|
||||||
},
|
|
||||||
"cAIKnowledge": {
|
|
||||||
"type": "link",
|
|
||||||
"entity": "CAIKnowledge"
|
|
||||||
},
|
|
||||||
"cAIKnowledgeId": {
|
|
||||||
"type": "varchar",
|
|
||||||
"len": 17,
|
|
||||||
"index": true
|
|
||||||
},
|
|
||||||
"cAIKnowledgeName": {
|
|
||||||
"type": "varchar",
|
|
||||||
"notStorable": true,
|
|
||||||
"relation": "cAIKnowledge",
|
|
||||||
"foreign": "name"
|
|
||||||
},
|
|
||||||
"cDokumente": {
|
|
||||||
"type": "link",
|
|
||||||
"entity": "CDokumente"
|
|
||||||
},
|
|
||||||
"cDokumenteId": {
|
|
||||||
"type": "varchar",
|
|
||||||
"len": 17,
|
|
||||||
"index": true
|
|
||||||
},
|
|
||||||
"cDokumenteName": {
|
|
||||||
"type": "varchar",
|
|
||||||
"notStorable": true,
|
|
||||||
"relation": "cDokumente",
|
|
||||||
"foreign": "name"
|
|
||||||
},
|
|
||||||
"aiDocumentId": {
|
|
||||||
"type": "varchar",
|
|
||||||
"len": 255,
|
|
||||||
"tooltip": true
|
|
||||||
},
|
|
||||||
"syncstatus": {
|
|
||||||
"type": "enum",
|
|
||||||
"options": ["new", "unclean", "synced", "failed", "unsupported"],
|
|
||||||
"default": "new",
|
|
||||||
"style": {
|
|
||||||
"new": "primary",
|
|
||||||
"unclean": "warning",
|
|
||||||
"synced": "success",
|
|
||||||
"failed": "danger",
|
|
||||||
"unsupported": "default"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"lastSync": {
|
|
||||||
"type": "datetime"
|
|
||||||
},
|
|
||||||
"syncedHash": {
|
|
||||||
"type": "varchar",
|
|
||||||
"len": 64,
|
|
||||||
"tooltip": true
|
|
||||||
},
|
|
||||||
"deleted": {
|
|
||||||
"type": "bool",
|
|
||||||
"default": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"links": {
|
|
||||||
"cAIKnowledge": {
|
|
||||||
"type": "belongsTo",
|
|
||||||
"entity": "CAIKnowledge",
|
|
||||||
"foreign": "dokumentes"
|
|
||||||
},
|
|
||||||
"cDokumente": {
|
|
||||||
"type": "belongsTo",
|
|
||||||
"entity": "CDokumente",
|
|
||||||
"foreign": "aIKnowledges"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"collection": {
|
|
||||||
"orderBy": "id",
|
|
||||||
"order": "asc"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
{
|
|
||||||
"table": "c_a_i_knowledge_dokumente",
|
|
||||||
"fields": {
|
|
||||||
"id": {
|
|
||||||
"type": "id",
|
|
||||||
"dbType": "bigint",
|
|
||||||
"autoincrement": true
|
|
||||||
},
|
|
||||||
"cAIKnowledge": {
|
|
||||||
"type": "link",
|
|
||||||
"entity": "CAIKnowledge"
|
|
||||||
},
|
|
||||||
"cAIKnowledgeId": {
|
|
||||||
"type": "varchar",
|
|
||||||
"len": 17,
|
|
||||||
"index": true
|
|
||||||
},
|
|
||||||
"cAIKnowledgeName": {
|
|
||||||
"type": "varchar",
|
|
||||||
"notStorable": true,
|
|
||||||
"relation": "cAIKnowledge",
|
|
||||||
"foreign": "name"
|
|
||||||
},
|
|
||||||
"cDokumente": {
|
|
||||||
"type": "link",
|
|
||||||
"entity": "CDokumente"
|
|
||||||
},
|
|
||||||
"cDokumenteId": {
|
|
||||||
"type": "varchar",
|
|
||||||
"len": 17,
|
|
||||||
"index": true
|
|
||||||
},
|
|
||||||
"cDokumenteName": {
|
|
||||||
"type": "varchar",
|
|
||||||
"notStorable": true,
|
|
||||||
"relation": "cDokumente",
|
|
||||||
"foreign": "name"
|
|
||||||
},
|
|
||||||
"aiDocumentId": {
|
|
||||||
"type": "varchar",
|
|
||||||
"len": 255,
|
|
||||||
"tooltip": true
|
|
||||||
},
|
|
||||||
"syncstatus": {
|
|
||||||
"type": "enum",
|
|
||||||
"options": ["new", "unclean", "synced", "failed", "unsupported"],
|
|
||||||
"default": "new",
|
|
||||||
"style": {
|
|
||||||
"new": "primary",
|
|
||||||
"unclean": "warning",
|
|
||||||
"synced": "success",
|
|
||||||
"failed": "danger",
|
|
||||||
"unsupported": "default"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"lastSync": {
|
|
||||||
"type": "datetime"
|
|
||||||
},
|
|
||||||
"syncedHash": {
|
|
||||||
"type": "varchar",
|
|
||||||
"len": 64,
|
|
||||||
"tooltip": true
|
|
||||||
},
|
|
||||||
"deleted": {
|
|
||||||
"type": "bool",
|
|
||||||
"default": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"links": {
|
|
||||||
"cAIKnowledge": {
|
|
||||||
"type": "belongsTo",
|
|
||||||
"entity": "CAIKnowledge",
|
|
||||||
"foreign": "dokumentes"
|
|
||||||
},
|
|
||||||
"cDokumente": {
|
|
||||||
"type": "belongsTo",
|
|
||||||
"entity": "CDokumente",
|
|
||||||
"foreign": "aIKnowledges"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"collection": {
|
|
||||||
"orderBy": "id",
|
|
||||||
"order": "asc"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"entity": true,
|
|
||||||
"object": false,
|
|
||||||
"layouts": false,
|
|
||||||
"tab": false,
|
|
||||||
"acl": true,
|
|
||||||
"customizable": false,
|
|
||||||
"type": "Base",
|
|
||||||
"module": "Custom",
|
|
||||||
"isCustom": true
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"entity": true,
|
|
||||||
"object": false,
|
|
||||||
"layouts": false,
|
|
||||||
"tab": false,
|
|
||||||
"acl": true,
|
|
||||||
"customizable": false,
|
|
||||||
"type": "Base",
|
|
||||||
"module": "Custom",
|
|
||||||
"isCustom": true
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"entity": true,
|
|
||||||
"type": "Base",
|
|
||||||
"module": "Custom",
|
|
||||||
"object": true,
|
|
||||||
"isCustom": true,
|
|
||||||
"tab": false,
|
|
||||||
"acl": true,
|
|
||||||
"disabled": false
|
|
||||||
}
|
|
||||||
@@ -359,7 +359,7 @@ return [
|
|||||||
0 => 'youtube.com',
|
0 => 'youtube.com',
|
||||||
1 => 'google.com'
|
1 => 'google.com'
|
||||||
],
|
],
|
||||||
'microtime' => 1774535910.373412,
|
'microtime' => 1774536094.057648,
|
||||||
'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',
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
return [
|
return [
|
||||||
'cacheTimestamp' => 1774535964,
|
'cacheTimestamp' => 1774536094,
|
||||||
'microtimeState' => 1774535964.447046,
|
'microtimeState' => 1774536094.274373,
|
||||||
'currencyRates' => [
|
'currencyRates' => [
|
||||||
'EUR' => 1.0
|
'EUR' => 1.0
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user