diff --git a/README.md b/README.md index 7ee64af4..6f62213e 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,11 @@ Alle Dateien sind im JSON-Format. Die KI muss gültiges JSON parsen und schreibe Links: Beziehungen (belongsTo für 1:1, hasMany für 1:N, etc.). Collection: Für Listen-Views (Sortierung, Filter). Auslösen: Hinzufügen eines Felds triggert bei Rebuild eine Datenbankänderung (neue Spalte in der Tabelle). Beziehungen erstellen Middle-Tables bei Many-to-Many. + **WICHTIG - Bidirektionale Relationships**: Bei hasMany-Relationships (z. B. viele Contacts zu einer Entität) müssen **beide Seiten** definiert werden: + - In Entität A: Link mit `relationName` und `foreign` (zeigt auf Link-Namen in Entität B) + - In Entität B (z. B. Contact): Link mit **derselben** `relationName` und `foreign` (zeigt auf Link-Namen in Entität A) + - Beispiel: `CVmhMietverhltnis` hat Link `contactsMietverhltnis` mit relationName `cVmhMietverhltnisContact`; `Contact` hat Link `cVmhMietverhltnisesContact` mit derselben relationName und foreign `contactsMietverhltnis`. + - Fehlt eine Seite, gibt EspoCRM 404-Fehler "Link does not exist" zurück. docs.espocrm.com clientDefs/{EntityType}.json (Format-Beispiel): @@ -169,7 +174,7 @@ Zukünftige Ziele: - Die KI soll über APIs/Webhooks angebunden werden, ohne EspoCRMs Core zu modifizieren, um Stabilität zu wahren. - **Erweiterte Features**: Mehrsprachigkeit, Mandanten-Isolation für mehrere Kanzlei-Teams, Integration mit externen Systemen (z. B. Gerichts-APIs, Buchhaltung). -Die KI kann diese Ziele unterstützen, indem sie JSON-Strukturen analysiert, Änderungen vorschlägt (z. B. neue Felder für Compliance) und Workflows modelliert. Das System soll skalierbar, GDPR-konform und benutzerfreundlich sein, um die Effizienz in der Rechtsbranche zu steigern. +Die KI kann diese Ziele unterstützen, indem sie JSON-Strukturen analysiert, Änderungen vorschlägt (z. B. neue Felder für Compliance) und Workflows modelliert. Das System soll skalierbar und benutzerfreundlich sein, um die Effizienz in der Rechtsbranche zu steigern. 6. Bearbeitung von Entitäten und Layouts @@ -221,3 +226,117 @@ Um die Entwicklung und Wartung zu erleichtern, wurden benutzerdefinierte Scripts - Sichere Backups vor Lösch- oder Edit-Operationen. - Für komplexe Änderungen die EspoCRM-UI verwenden. - Execute simuliert nur einfache Aktionen; für vollständige Ausführung EspoCRM-API nutzen. + +## 8. Troubleshooting + +### 404-Fehler "Link does not exist" +- **Symptom**: HTTP 404-Fehler in Logs: "Link does not exist" beim Versuch, eine Relationship anzuzeigen oder zu verknüpfen. +- **Ursache**: Bei hasMany-Relationships fehlt die Definition auf einer Seite der Beziehung. EspoCRM benötigt bidirektionale Link-Definitionen. +- **Lösung**: + - Prüfe beide entityDefs-Dateien (z.B. `CBeteiligte.json` UND `Contact.json`). + - Stelle sicher, dass beide Seiten den Link mit derselben `relationName` definieren. + - Das `foreign`-Attribut muss jeweils auf den Link-Namen der Gegenseite zeigen. + - Beispiel: + ```json + // In CBeteiligte.json: + "contactsBeteiligte": { + "type": "hasMany", + "relationName": "cBeteiligteContact", + "foreign": "cBeteiligteContact", + "entity": "Contact" + } + + // In Contact.json: + "cBeteiligteContact": { + "type": "hasMany", + "relationName": "cBeteiligteContact", + "foreign": "contactsBeteiligte", + "entity": "CBeteiligte" + } + ``` + - Nach Korrektur: `docker exec espocrm php /var/www/html/command.php Rebuild` ausführen. + +### 500-Fehler bei Layout-Änderungen +- **Symptom**: HTTP 500-Fehler beim Versuch, Layouts in der EspoCRM-UI zu bearbeiten (z.B. "Permission denied for custom/Espo/Custom/Resources/layouts/..."). +- **Ursache**: Das `custom/`-Verzeichnis gehört `root:root`, aber der EspoCRM-Container läuft als `www-data`-User, der keine Schreibrechte hat. +- **Lösung**: + - Führe auf dem Host aus: `chown -R www-data:www-data /var/lib/docker/volumes/vmh-espocrm_espocrm/_data/custom` + - Dies gibt `www-data` Schreibrechte für Custom-Dateien. +- **Prävention**: Stelle sicher, dass neue Custom-Dateien mit korrekten Berechtigungen erstellt werden (z.B. via Docker-Container als `www-data`). + +### Allgemeine Tipps +- Nach Änderungen immer `docker exec espocrm php /var/www/html/command.php Rebuild` ausführen. +- Logs prüfen: `tail -n 100 /var/lib/docker/volumes/vmh-espocrm_espocrm/_data/data/logs/espo-YYYY-MM-DD.log` +- Bei Relationship-Problemen: Logs nach "404" und "Link does not exist" durchsuchen: `tail -n 500 /var/lib/docker/volumes/vmh-espocrm_espocrm/_data/data/logs/espo-$(date +%Y-%m-%d).log | grep -A 3 "404\|Link does not exist"` +- Bei DB-Problemen: Custom-Scripts wie `workflow_manager.php` verwenden. + +## 9. Portal-Freigabe-System + +Um Entitäten für Portalnutzer (Contact-Entität) freizugeben, wurde ein konsistentes Freigabe-System implementiert: + +### Implementierte Portal-Relationships: +- **CVmhMietverhltnis** → `contactsMietverhltnis` (relationName: `cVmhMietverhltnisContact`) +- **CBeteiligte** → `contactsBeteiligte` (relationName: `cBeteiligteContact`) +- **CMietobjekt** → `contactsMietobjekt` (relationName: `cMietobjektContactPortal`) +- **CAdressen** → `contactsAdressen` (relationName: `cAdressenContact`) +- **CVmhRumungsklage** → `contactsRumungsklage` (relationName: `cVmhRumungsklageContact`) + +### Pattern für neue Portal-Relationships: + +1. **entityDefs der Hauptentität** (z.B. `CBeteiligte.json`): +```json +"contactsBeteiligte": { + "type": "hasMany", + "relationName": "cBeteiligteContact", + "foreign": "cBeteiligteContact", + "entity": "Contact", + "audited": false, + "isCustom": true +} +``` + +2. **entityDefs von Contact** (`Contact.json`): +```json +"cBeteiligteContact": { + "type": "hasMany", + "relationName": "cBeteiligteContact", + "foreign": "contactsBeteiligte", + "entity": "CBeteiligte", + "audited": false, + "isCustom": true +} +``` + +3. **clientDefs der Hauptentität** (`CBeteiligte.json`): +```json +"relationshipPanels": { + "contactsBeteiligte": { + "layout": null, + "selectPrimaryFilterName": "portalUsers" + } +} +``` + +4. **bottomPanelsDetail Layout** (Tab-Ansicht): +```json +{ + "_tabBreak_0": { + "index": 0, + "tabBreak": true, + "tabLabel": "Freigabe für" + }, + "contactsBeteiligte": { + "dynamicLogicVisible": null, + "style": "warning", + "dynamicLogicStyled": null, + "sticked": true, + "index": 1 + } +} +``` + +### Wichtige Hinweise: +- `selectPrimaryFilterName: "portalUsers"` filtert automatisch auf Portal-User +- Tab "Freigabe für" sollte immer der erste Tab im Bottom-Panel sein (index: 0) +- Style "warning" hebt das Panel visuell hervor +- Nach Änderungen immer Rebuild durchführen und beide Seiten der Relationship definieren \ No newline at end of file diff --git a/custom/Espo/Custom/Resources/i18n/de_DE/CAdressen.json b/custom/Espo/Custom/Resources/i18n/de_DE/CAdressen.json index 3e87d870..9a9570eb 100644 --- a/custom/Espo/Custom/Resources/i18n/de_DE/CAdressen.json +++ b/custom/Espo/Custom/Resources/i18n/de_DE/CAdressen.json @@ -1,5 +1,8 @@ { "labels": { "Create CAdressen": "Adressen erstellen" + }, + "fields": { + "isActive": "Aktiv" } } \ No newline at end of file diff --git a/custom/Espo/Custom/Resources/i18n/de_DE/CBeteiligte.json b/custom/Espo/Custom/Resources/i18n/de_DE/CBeteiligte.json index 757f3e36..8f23fdaf 100644 --- a/custom/Espo/Custom/Resources/i18n/de_DE/CBeteiligte.json +++ b/custom/Espo/Custom/Resources/i18n/de_DE/CBeteiligte.json @@ -4,7 +4,12 @@ }, "links": { "calls": "Anrufe", - "tasks": "Aufgaben" + "tasks": "Aufgaben", + "vmhvermieterbeteiligte": "Vermieter", + "vmhmieterbeteiligte": "Mieter", + "vmhMietverhltnisesSonstigeBesitzer": "Sonstige Bewohner", + "vmhRumungsklagesKlaeger": "Kläger", + "vmhRumungsklagesBeklagte": "Beklagte" }, "labels": { "Create CBeteiligte": "Beteiligte erstellen" diff --git a/custom/Espo/Custom/Resources/i18n/de_DE/CVmhRumungsklage.json b/custom/Espo/Custom/Resources/i18n/de_DE/CVmhRumungsklage.json index df1313ad..d68bafcb 100644 --- a/custom/Espo/Custom/Resources/i18n/de_DE/CVmhRumungsklage.json +++ b/custom/Espo/Custom/Resources/i18n/de_DE/CVmhRumungsklage.json @@ -1,4 +1,7 @@ { + "fields": { + "portalUser": "Portalnutzer" + }, "links": { "calls": "Anrufe", "tasks": "Aufgaben" diff --git a/custom/Espo/Custom/Resources/i18n/en_US/CAdressen.json b/custom/Espo/Custom/Resources/i18n/en_US/CAdressen.json index c49b863c..87df96ef 100644 --- a/custom/Espo/Custom/Resources/i18n/en_US/CAdressen.json +++ b/custom/Espo/Custom/Resources/i18n/en_US/CAdressen.json @@ -8,6 +8,7 @@ "adresseCountry": "Adresse Country", "adressePostalCode": "Adresse Postal Code", "adresseMap": "Adresse Map", + "isActive": "Active", "autoapplymietverhaltnisportaluser": "Portalnutzer von Mietverhältnis übernehmen", "advowareindexid": "Advoware_index_id" }, diff --git a/custom/Espo/Custom/Resources/layouts/CAdressen/bottomPanelsDetail.json b/custom/Espo/Custom/Resources/layouts/CAdressen/bottomPanelsDetail.json new file mode 100644 index 00000000..2f2f5ce8 --- /dev/null +++ b/custom/Espo/Custom/Resources/layouts/CAdressen/bottomPanelsDetail.json @@ -0,0 +1,31 @@ +{ + "_delimiter_": { + "disabled": true + }, + "activities": { + "disabled": true + }, + "history": { + "disabled": true + }, + "_tabBreak_0": { + "index": 0, + "tabBreak": true, + "tabLabel": "Freigegebene Nutzer" + }, + "contactsAdressen": { + "dynamicLogicVisible": null, + "style": "warning", + "dynamicLogicStyled": null, + "sticked": true, + "index": 1 + }, + "_tabBreak_1": { + "index": 2, + "tabBreak": true, + "tabLabel": "Beteiligte" + }, + "beteiligte": { + "index": 3 + } +} diff --git a/custom/Espo/Custom/Resources/layouts/CAdressen/detail.json b/custom/Espo/Custom/Resources/layouts/CAdressen/detail.json new file mode 100644 index 00000000..87dbe4ba --- /dev/null +++ b/custom/Espo/Custom/Resources/layouts/CAdressen/detail.json @@ -0,0 +1,24 @@ +[ + { + "rows": [ + [ + { + "name": "name" + }, + { + "name": "isActive" + } + ], + [ + { + "name": "adresse" + }, + { + "name": "adresseMap" + } + ] + ], + "style": "default", + "label": "Overview" + } +] \ No newline at end of file diff --git a/custom/Espo/Custom/Resources/layouts/CBeteiligte/bottomPanelsDetail.json b/custom/Espo/Custom/Resources/layouts/CBeteiligte/bottomPanelsDetail.json index 7fe8a248..d388abd5 100644 --- a/custom/Espo/Custom/Resources/layouts/CBeteiligte/bottomPanelsDetail.json +++ b/custom/Espo/Custom/Resources/layouts/CBeteiligte/bottomPanelsDetail.json @@ -8,10 +8,57 @@ "history": { "disabled": true }, + "_tabBreak_0": { + "index": 0, + "tabBreak": true, + "tabLabel": "Freigegebene Nutzer" + }, + "contactsBeteiligte": { + "dynamicLogicVisible": null, + "style": "warning", + "dynamicLogicStyled": null, + "sticked": true, + "index": 1 + }, + "_tabBreak_1": { + "index": 2, + "tabBreak": true, + "tabLabel": "Mietverhältnisse" + }, "vmhvermieterbeteiligte": { - "index": 0 + "index": 3 + }, + "vmhmieterbeteiligte": { + "index": 4 + }, + "vmhMietverhltnisesSonstigeBesitzer": { + "index": 5 + }, + "_tabBreak_2": { + "index": 6, + "tabBreak": true, + "tabLabel": "Adressen" }, "adressens": { - "index": 1 + "index": 7 + }, + "_tabBreak_3": { + "index": 8, + "tabBreak": true, + "tabLabel": "Räumungsklagen" + }, + "vmhRumungsklagesKlaeger": { + "index": 9 + }, + "vmhRumungsklagesBeklagte": { + "index": 10 + }, + "_tabBreak_4": { + "index": 11, + "tabBreak": true, + "tabLabel": "Dokumente" + }, + "dokumentesBeteiligte": { + "index": 12 } } \ No newline at end of file diff --git a/custom/Espo/Custom/Resources/layouts/CBeteiligte/relations/adressens.json b/custom/Espo/Custom/Resources/layouts/CBeteiligte/relations/adressens.json new file mode 100644 index 00000000..27d26281 --- /dev/null +++ b/custom/Espo/Custom/Resources/layouts/CBeteiligte/relations/adressens.json @@ -0,0 +1,28 @@ +[ + { + "name": "name", + "width": 20, + "link": true + }, + { + "name": "adresseStreet", + "width": 25 + }, + { + "name": "adresseCity", + "width": 20 + }, + { + "name": "adresseCountry", + "width": 15 + }, + { + "name": "isActive", + "width": 10 + }, + { + "name": "createdAt", + "width": 10, + "align": "right" + } +] \ No newline at end of file diff --git a/custom/Espo/Custom/Resources/layouts/CMietobjekt/bottomPanelsDetail.json b/custom/Espo/Custom/Resources/layouts/CMietobjekt/bottomPanelsDetail.json index 0749723d..e1845201 100644 --- a/custom/Espo/Custom/Resources/layouts/CMietobjekt/bottomPanelsDetail.json +++ b/custom/Espo/Custom/Resources/layouts/CMietobjekt/bottomPanelsDetail.json @@ -2,10 +2,40 @@ "_delimiter_": { "disabled": true }, + "_tabBreak_1": { + "index": 0, + "tabBreak": true, + "tabLabel": "Freigegebene Nutzer" + }, + "contactsMietobjekt": { + "dynamicLogicVisible": null, + "style": "warning", + "dynamicLogicStyled": null, + "sticked": true, + "index": 1 + }, + "_tabBreak_2": { + "index": 2, + "tabBreak": true, + "tabLabel": "Kontakte" + }, "contact2mietobjekt": { - "index": 0 + "index": 3 + }, + "_tabBreak_3": { + "index": 4, + "tabBreak": true, + "tabLabel": "Mietverhältnisse" }, "vmhMietverhltnises2Mietobjekt": { - "index": 1 + "index": 5 + }, + "_tabBreak_4": { + "index": 6, + "tabBreak": true, + "tabLabel": "Dokumente" + }, + "dokumentesMietobjekt": { + "index": 7 } } \ No newline at end of file diff --git a/custom/Espo/Custom/Resources/layouts/CVmhMietverhltnis/bottomPanelsDetail.json b/custom/Espo/Custom/Resources/layouts/CVmhMietverhltnis/bottomPanelsDetail.json index 871e8cc1..a329db92 100644 --- a/custom/Espo/Custom/Resources/layouts/CVmhMietverhltnis/bottomPanelsDetail.json +++ b/custom/Espo/Custom/Resources/layouts/CVmhMietverhltnis/bottomPanelsDetail.json @@ -11,7 +11,7 @@ "_tabBreak_2": { "index": 0, "tabBreak": true, - "tabLabel": "Mandantenportal" + "tabLabel": "Freigegebene Nutzer" }, "contactsMietverhltnis": { "dynamicLogicVisible": null, diff --git a/custom/Espo/Custom/Resources/layouts/CVmhRumungsklage/bottomPanelsDetail.json b/custom/Espo/Custom/Resources/layouts/CVmhRumungsklage/bottomPanelsDetail.json index e7129ce7..4f799de2 100644 --- a/custom/Espo/Custom/Resources/layouts/CVmhRumungsklage/bottomPanelsDetail.json +++ b/custom/Espo/Custom/Resources/layouts/CVmhRumungsklage/bottomPanelsDetail.json @@ -8,21 +8,57 @@ "history": { "disabled": true }, - "_tabBreak_1": { + "_tabBreak_0": { "index": 0, "tabBreak": true, - "tabLabel": "Allgemein" + "tabLabel": "Freigegebene Nutzer" }, - "stream": { - "sticked": false, + "contactsRumungsklage": { + "dynamicLogicVisible": null, + "style": "warning", + "dynamicLogicStyled": null, + "sticked": true, "index": 1 }, - "_tabBreak_0": { + "_tabBreak_1": { "index": 2, "tabBreak": true, + "tabLabel": "Kläger" + }, + "klaeger": { + "index": 3 + }, + "_tabBreak_2": { + "index": 4, + "tabBreak": true, + "tabLabel": "Beklagte" + }, + "beklagte": { + "index": 5 + }, + "_tabBreak_3": { + "index": 6, + "tabBreak": true, + "tabLabel": "Mietverhältnisse" + }, + "vmhMietverhltnises": { + "index": 7 + }, + "_tabBreak_4": { + "index": 8, + "tabBreak": true, "tabLabel": "Dokumente" }, "dokumentesvmhraumungsklage": { - "index": 3 + "index": 9 + }, + "_tabBreak_5": { + "index": 10, + "tabBreak": true, + "tabLabel": "Stream" + }, + "stream": { + "sticked": false, + "index": 11 } } \ No newline at end of file diff --git a/custom/Espo/Custom/Resources/metadata/clientDefs/CAdressen.json b/custom/Espo/Custom/Resources/metadata/clientDefs/CAdressen.json index 94bbb01c..8deb63ef 100644 --- a/custom/Espo/Custom/Resources/metadata/clientDefs/CAdressen.json +++ b/custom/Espo/Custom/Resources/metadata/clientDefs/CAdressen.json @@ -8,6 +8,18 @@ "beteiligte": { "layout": null, "selectPrimaryFilterName": null + }, + "contactsAdressen": { + "layout": null, + "selectPrimaryFilterName": "portalUsers" } - } + }, + "detailActionList": [ + { + "label": "View Map", + "action": "viewMap", + "acl": "read" + } + ], + "addressField": "adresse" } \ No newline at end of file diff --git a/custom/Espo/Custom/Resources/metadata/clientDefs/CBeteiligte.json b/custom/Espo/Custom/Resources/metadata/clientDefs/CBeteiligte.json index e3bffb71..4f8a0a3f 100644 --- a/custom/Espo/Custom/Resources/metadata/clientDefs/CBeteiligte.json +++ b/custom/Espo/Custom/Resources/metadata/clientDefs/CBeteiligte.json @@ -38,15 +38,18 @@ "relationshipPanels": { "vmhvermieterbeteiligte": { "layout": null, - "selectPrimaryFilterName": null + "selectPrimaryFilterName": null, + "title": "Vermieter" }, "vmhmieterbeteiligte": { "layout": null, - "selectPrimaryFilterName": null + "selectPrimaryFilterName": null, + "title": "Mieter" }, "vmhMietverhltnisesSonstigeBesitzer": { "layout": null, - "selectPrimaryFilterName": null + "selectPrimaryFilterName": null, + "title": "Sonstige Bewohner" }, "adressens": { "layout": null, @@ -55,6 +58,24 @@ "calls1": { "layout": null, "selectPrimaryFilterName": "planned" + }, + "contactsBeteiligte": { + "layout": null, + "selectPrimaryFilterName": "portalUsers" + }, + "vmhRumungsklagesKlaeger": { + "layout": null, + "selectPrimaryFilterName": null, + "title": "Kläger" + }, + "vmhRumungsklagesBeklagte": { + "layout": null, + "selectPrimaryFilterName": null, + "title": "Beklagte" + }, + "dokumentesBeteiligte": { + "layout": null, + "selectPrimaryFilterName": null } } } \ No newline at end of file diff --git a/custom/Espo/Custom/Resources/metadata/clientDefs/CMietobjekt.json b/custom/Espo/Custom/Resources/metadata/clientDefs/CMietobjekt.json index 4df5c9ad..21d6326f 100644 --- a/custom/Espo/Custom/Resources/metadata/clientDefs/CMietobjekt.json +++ b/custom/Espo/Custom/Resources/metadata/clientDefs/CMietobjekt.json @@ -13,6 +13,14 @@ "contact2mietobjekt": { "layout": null, "selectPrimaryFilterName": "portalUsers" + }, + "contactsMietobjekt": { + "layout": null, + "selectPrimaryFilterName": "portalUsers" + }, + "dokumentesMietobjekt": { + "layout": null, + "selectPrimaryFilterName": null } } } \ No newline at end of file diff --git a/custom/Espo/Custom/Resources/metadata/clientDefs/CVmhRumungsklage.json b/custom/Espo/Custom/Resources/metadata/clientDefs/CVmhRumungsklage.json index 16fe3a62..95b6bfd0 100644 --- a/custom/Espo/Custom/Resources/metadata/clientDefs/CVmhRumungsklage.json +++ b/custom/Espo/Custom/Resources/metadata/clientDefs/CVmhRumungsklage.json @@ -50,6 +50,22 @@ "dokumentesvmhraumungsklage": { "layout": "listRaeumungsKl", "selectPrimaryFilterName": null + }, + "contactsRumungsklage": { + "layout": null, + "selectPrimaryFilterName": "portalUsers" + }, + "klaeger": { + "layout": null, + "selectPrimaryFilterName": null + }, + "beklagte": { + "layout": null, + "selectPrimaryFilterName": null + }, + "vmhMietverhltnises": { + "layout": null, + "selectPrimaryFilterName": null } }, "kanbanViewMode": false, diff --git a/custom/Espo/Custom/Resources/metadata/entityDefs/CAdressen.json b/custom/Espo/Custom/Resources/metadata/entityDefs/CAdressen.json index fb84475b..d79b38c6 100644 --- a/custom/Espo/Custom/Resources/metadata/entityDefs/CAdressen.json +++ b/custom/Espo/Custom/Resources/metadata/entityDefs/CAdressen.json @@ -45,6 +45,11 @@ "type": "address", "isCustom": true }, + "isActive": { + "type": "bool", + "default": true, + "isCustom": true + }, "autoapplymietverhaltnisportaluser": { "notNull": true, "type": "bool", @@ -84,6 +89,14 @@ "entity": "CBeteiligte", "audited": false, "isCustom": true + }, + "contactsAdressen": { + "type": "hasMany", + "relationName": "cAdressenContact", + "foreign": "cAdressenContact", + "entity": "Contact", + "audited": false, + "isCustom": true } }, "collection": { diff --git a/custom/Espo/Custom/Resources/metadata/entityDefs/CBeteiligte.json b/custom/Espo/Custom/Resources/metadata/entityDefs/CBeteiligte.json index e43200e9..6dc11ca9 100644 --- a/custom/Espo/Custom/Resources/metadata/entityDefs/CBeteiligte.json +++ b/custom/Espo/Custom/Resources/metadata/entityDefs/CBeteiligte.json @@ -169,6 +169,38 @@ "entity": "Call", "audited": false, "isCustom": true + }, + "contactsBeteiligte": { + "type": "hasMany", + "relationName": "cBeteiligteContact", + "foreign": "cBeteiligteContact", + "entity": "Contact", + "audited": false, + "isCustom": true + }, + "vmhRumungsklagesKlaeger": { + "type": "hasMany", + "relationName": "cBeteiligteVmhRumungsklageKlaeger", + "foreign": "klaeger", + "entity": "CVmhRumungsklage", + "audited": false, + "isCustom": true + }, + "vmhRumungsklagesBeklagte": { + "type": "hasMany", + "relationName": "cBeteiligteVmhRumungsklageBeklagte", + "foreign": "beklagte", + "entity": "CVmhRumungsklage", + "audited": false, + "isCustom": true + }, + "dokumentesBeteiligte": { + "type": "hasMany", + "relationName": "cBeteiligteDokumente", + "foreign": "beteiligte2dokumente", + "entity": "CDokumente", + "audited": false, + "isCustom": true } }, "collection": { diff --git a/custom/Espo/Custom/Resources/metadata/entityDefs/CDokumente.json b/custom/Espo/Custom/Resources/metadata/entityDefs/CDokumente.json index ed71bcea..f532e0ad 100644 --- a/custom/Espo/Custom/Resources/metadata/entityDefs/CDokumente.json +++ b/custom/Espo/Custom/Resources/metadata/entityDefs/CDokumente.json @@ -135,6 +135,22 @@ "entity": "CVmhRumungsklage", "audited": false, "isCustom": true + }, + "beteiligte2dokumente": { + "type": "hasMany", + "relationName": "cBeteiligteDokumente", + "foreign": "dokumentesBeteiligte", + "entity": "CBeteiligte", + "audited": false, + "isCustom": true + }, + "mietobjekt2dokumente": { + "type": "hasMany", + "relationName": "cMietobjektDokumente", + "foreign": "dokumentesMietobjekt", + "entity": "CMietobjekt", + "audited": false, + "isCustom": true } }, "collection": { diff --git a/custom/Espo/Custom/Resources/metadata/entityDefs/CMietobjekt.json b/custom/Espo/Custom/Resources/metadata/entityDefs/CMietobjekt.json index fb9cf50f..a055b3e7 100644 --- a/custom/Espo/Custom/Resources/metadata/entityDefs/CMietobjekt.json +++ b/custom/Espo/Custom/Resources/metadata/entityDefs/CMietobjekt.json @@ -106,6 +106,22 @@ "entity": "Contact", "audited": false, "isCustom": true + }, + "contactsMietobjekt": { + "type": "hasMany", + "relationName": "cMietobjektContactPortal", + "foreign": "cMietobjekteContactPortal", + "entity": "Contact", + "audited": false, + "isCustom": true + }, + "dokumentesMietobjekt": { + "type": "hasMany", + "relationName": "cMietobjektDokumente", + "foreign": "mietobjekt2dokumente", + "entity": "CDokumente", + "audited": false, + "isCustom": true } }, "collection": { diff --git a/custom/Espo/Custom/Resources/metadata/entityDefs/CVmhRumungsklage.json b/custom/Espo/Custom/Resources/metadata/entityDefs/CVmhRumungsklage.json index fc28f7b5..cccaf1b3 100644 --- a/custom/Espo/Custom/Resources/metadata/entityDefs/CVmhRumungsklage.json +++ b/custom/Espo/Custom/Resources/metadata/entityDefs/CVmhRumungsklage.json @@ -129,6 +129,30 @@ "entity": "CDokumente", "audited": false, "isCustom": true + }, + "contactsRumungsklage": { + "type": "hasMany", + "relationName": "cVmhRumungsklageContact", + "foreign": "cVmhRumungsklageContact", + "entity": "Contact", + "audited": false, + "isCustom": true + }, + "klaeger": { + "type": "hasMany", + "relationName": "cBeteiligteVmhRumungsklageKlaeger", + "foreign": "vmhRumungsklagesKlaeger", + "entity": "CBeteiligte", + "audited": false, + "isCustom": true + }, + "beklagte": { + "type": "hasMany", + "relationName": "cBeteiligteVmhRumungsklageBeklagte", + "foreign": "vmhRumungsklagesBeklagte", + "entity": "CBeteiligte", + "audited": false, + "isCustom": true } }, "collection": { diff --git a/custom/Espo/Custom/Resources/metadata/entityDefs/Contact.json b/custom/Espo/Custom/Resources/metadata/entityDefs/Contact.json index 0f7df285..d8e90695 100644 --- a/custom/Espo/Custom/Resources/metadata/entityDefs/Contact.json +++ b/custom/Espo/Custom/Resources/metadata/entityDefs/Contact.json @@ -53,6 +53,38 @@ "entity": "CMietobjekt", "audited": false, "isCustom": true + }, + "cBeteiligteContact": { + "type": "hasMany", + "relationName": "cBeteiligteContact", + "foreign": "contactsBeteiligte", + "entity": "CBeteiligte", + "audited": false, + "isCustom": true + }, + "cMietobjekteContactPortal": { + "type": "hasMany", + "relationName": "cMietobjektContactPortal", + "foreign": "contactsMietobjekt", + "entity": "CMietobjekt", + "audited": false, + "isCustom": true + }, + "cAdressenContact": { + "type": "hasMany", + "relationName": "cAdressenContact", + "foreign": "contactsAdressen", + "entity": "CAdressen", + "audited": false, + "isCustom": true + }, + "cVmhRumungsklageContact": { + "type": "hasMany", + "relationName": "cVmhRumungsklageContact", + "foreign": "contactsRumungsklage", + "entity": "CVmhRumungsklage", + "audited": false, + "isCustom": true } }, "fields": { diff --git a/data/config.php b/data/config.php index 164bbd9f..4e203824 100644 --- a/data/config.php +++ b/data/config.php @@ -349,8 +349,8 @@ return [ 0 => 'youtube.com', 1 => 'google.com' ], - 'cacheTimestamp' => 1768843902, - 'microtime' => 1768843902.115102, + 'cacheTimestamp' => 1768912371, + 'microtime' => 1768912371.141233, 'siteUrl' => 'https://crm.bitbylaw.com', 'fullTextSearchMinLength' => 4, 'appTimestamp' => 1768843902,