Add CKndigung layout files and update cache timestamps; improve UI structure and error handling

This commit is contained in:
2026-01-25 10:26:44 +01:00
parent 30326da8c6
commit eaeba65487
8 changed files with 323 additions and 14 deletions

View File

@@ -177,50 +177,92 @@ Basierend auf der Analyse von Git-Commits und praktischen Erfahrungen treten bes
#### 2. Layout-Strukturfehler
**Problem:** Unnötige oder falsche Array-Elemente in Layouts, die zu UI-Problemen führen.
**Problem:** Falsche Platzhalter und Strukturen in Layouts führen zu UI-Problemen.
**⚠️ KRITISCH für EspoCRM 7.x:**
In EspoCRM 7.x ist `false` als Platzhalter **NICHT MEHR ERLAUBT**!
**Symptome:**
- Layout wird nicht geladen, Fehlermeldung in UI
- Felder werden nicht korrekt angeordnet
- Leere Bereiche in Detail-Views
- Inkonsistente Spaltenbreiten
- bottomPanelsDetail funktioniert nicht
**❌ FALSCH:**
**❌ FALSCH (EspoCRM 7.x):**
```json
// layouts/Entity/detail.json
{
"rows": [
[
{"name": "field1"}
],
[
{"name": "field1"},
{"name": "field2"},
false // ← Unnötiges false-Element!
false, // ← DEPRECATED! Funktioniert in 7.x NICHT!
false // ← Verursacht Layout-Fehler!
]
]
}
```
**✅ RICHTIG:**
**✅ RICHTIG (EspoCRM 7.x):**
```json
{
"rows": [
[
{"name": "field1"},
{"name": "field2"} // Beide in einer Row
{"name": "field2"},
{}, // ← Leeres Objekt verwenden!
{} // ← Funktioniert in 7.x korrekt
]
]
}
```
**❌ FALSCH - bottomPanelsDetail.json als Array:**
```json
// layouts/Entity/bottomPanelsDetail.json
[
{"name": "contacts"},
{"name": "documents"}
]
```
**✅ RICHTIG - bottomPanelsDetail.json als Objekt:**
```json
{
"contacts": {
"index": 0,
"sticked": true,
"style": "warning"
},
"_tabBreak_0": {
"index": 1,
"columnBreak": true
},
"documents": {
"index": 2
},
"activities": {
"disabled": true
},
"history": {
"disabled": true
}
}
```
**Häufige Layout-Fehler:**
-**`false` als Platzhalter** (seit EspoCRM 7.x nicht mehr unterstützt!)
- ❌ Width-Attribute in Detail-Layouts (nur für List-Layouts!)
-Leere Objekte `{}` oder `false` in Rows
- ❌ Index nicht angepasst nach Entfernung von Panels (bottomPanelsDetail)
-bottomPanelsDetail.json als Array statt Objekt
- ❌ Index nicht angepasst nach Entfernung von Panels
**Best Practice:**
- **Immer `{}` statt `false`** für leere Zellen in detail.json verwenden
- Width nur in `list.json` und `listSmall.json` verwenden
- Rows immer vollständig füllen oder Felder kombinieren
- bottomPanelsDetail.json **MUSS** Objekt-Format haben
- Rows immer mit 4 Spalten füllen (nutze `{}` zum Auffüllen)
- Nach Panel-Entfernung Indices neu nummerieren
- `_tabBreak_{index}` verwenden um Panels auf verschiedene Tabs zu verteilen
---

View File

@@ -0,0 +1,63 @@
{
"_delimiter_": {
"disabled": true
},
"activities": {
"disabled": true
},
"history": {
"disabled": true
},
"_tabBreak_0": {
"index": 0,
"tabBreak": true,
"tabLabel": "Freigegebene Nutzer"
},
"contactsKuendigung": {
"dynamicLogicVisible": null,
"style": "warning",
"dynamicLogicStyled": null,
"sticked": true,
"index": 1
},
"_tabBreak_1": {
"index": 2,
"tabBreak": true,
"tabLabel": "Kündigende"
},
"kuendiger": {
"index": 3
},
"_tabBreak_2": {
"index": 4,
"tabBreak": true,
"tabLabel": "Gekündigte"
},
"gekuendigte": {
"index": 5
},
"_tabBreak_3": {
"index": 6,
"tabBreak": true,
"tabLabel": "Mietverhältnisse"
},
"vmhMietverhltnises": {
"index": 7
},
"_tabBreak_4": {
"index": 8,
"tabBreak": true,
"tabLabel": "Dokumente"
},
"dokumenteskuendigung": {
"index": 9
},
"_tabBreak_5": {
"index": 10,
"tabBreak": true,
"tabLabel": "Mietobjekte"
},
"mietobjekte": {
"index": 11
}
}

View File

@@ -0,0 +1,11 @@
[
{
"name": ":assignedUser"
},
{
"name": "teams"
},
{
"name": "freigeschalteteNutzer"
}
]

View File

@@ -0,0 +1,114 @@
[
{
"label": "Kündigungsdetails",
"style": "default",
"tabBreak": false,
"rows": [
[
{
"name": "name"
},
{
"name": "kuendigungsart"
},
{
"name": "status"
},
{
"name": "advowareAktenzeichen"
}
],
[
{
"name": "kuendigungsgrund"
},
{
"name": "kuendigungsdatum"
},
{
"name": "zustelldatum"
},
{
"name": "zustellart"
}
],
[
{
"name": "kuendigungsfrist"
},
{
"name": "beendigungstermin"
},
{},
{}
],
[
{
"name": "kuendigungsgrundDetails"
}
]
]
},
{
"label": "Finanzielle Forderungen",
"style": "default",
"tabBreak": false,
"rows": [
[
{
"name": "rueckstandMiete"
},
{
"name": "rueckstandNebenkosten"
},
{
"name": "sonstigeForderungen"
},
{
"name": "aussergerichtlicheGebuehren13"
}
]
]
},
{
"label": "Notizen & Reaktion",
"style": "default",
"tabBreak": false,
"rows": [
[
{
"name": "reaktionMieter"
}
],
[
{
"name": "notizen"
}
],
[
{
"name": "description"
}
]
]
},
{
"label": "Advoware Sync",
"style": "default",
"tabBreak": true,
"tabLabel": "Erweitert",
"rows": [
[
{
"name": "betnr"
},
{
"name": "syncStatus"
},
{
"name": "advowareLastSync"
}
]
]
}
]

View File

@@ -0,0 +1,33 @@
[
{
"rows": [
[
{
"name": "name",
"noLabel": true
}
],
[
{
"name": "kuendigungsart"
},
{
"name": "status"
}
],
[
{
"name": "kuendigungsdatum"
},
{
"name": "beendigungstermin"
}
],
[
{
"name": "assignedUser"
}
]
]
}
]

View File

@@ -0,0 +1,31 @@
[
{
"name": "name",
"link": true,
"width": 20
},
{
"name": "kuendigungsart",
"width": 12
},
{
"name": "status",
"width": 12
},
{
"name": "kuendigungsdatum",
"width": 12
},
{
"name": "beendigungstermin",
"width": 12
},
{
"name": "assignedUser",
"width": 16
},
{
"name": "modifiedAt",
"width": 16
}
]

View File

@@ -0,0 +1,15 @@
[
{
"name": "name",
"link": true
},
{
"name": "kuendigungsart"
},
{
"name": "status"
},
{
"name": "kuendigungsdatum"
}
]

View File

@@ -360,8 +360,8 @@ return [
0 => 'youtube.com',
1 => 'google.com'
],
'cacheTimestamp' => 1769331937,
'microtime' => 1769331937.84435,
'cacheTimestamp' => 1769332527,
'microtime' => 1769332527.595512,
'siteUrl' => 'https://crm.bitbylaw.com',
'fullTextSearchMinLength' => 4,
'appTimestamp' => 1768843902,