Add CKndigung layout files and update cache timestamps; improve UI structure and error handling
This commit is contained in:
66
README.md
66
README.md
@@ -177,50 +177,92 @@ Basierend auf der Analyse von Git-Commits und praktischen Erfahrungen treten bes
|
|||||||
|
|
||||||
#### 2. Layout-Strukturfehler
|
#### 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:**
|
**Symptome:**
|
||||||
|
- Layout wird nicht geladen, Fehlermeldung in UI
|
||||||
- Felder werden nicht korrekt angeordnet
|
- Felder werden nicht korrekt angeordnet
|
||||||
- Leere Bereiche in Detail-Views
|
- Leere Bereiche in Detail-Views
|
||||||
- Inkonsistente Spaltenbreiten
|
- bottomPanelsDetail funktioniert nicht
|
||||||
|
|
||||||
**❌ FALSCH:**
|
**❌ FALSCH (EspoCRM 7.x):**
|
||||||
```json
|
```json
|
||||||
// layouts/Entity/detail.json
|
// layouts/Entity/detail.json
|
||||||
{
|
{
|
||||||
"rows": [
|
"rows": [
|
||||||
[
|
[
|
||||||
{"name": "field1"}
|
{"name": "field1"},
|
||||||
],
|
|
||||||
[
|
|
||||||
{"name": "field2"},
|
{"name": "field2"},
|
||||||
false // ← Unnötiges false-Element!
|
false, // ← DEPRECATED! Funktioniert in 7.x NICHT!
|
||||||
|
false // ← Verursacht Layout-Fehler!
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**✅ RICHTIG:**
|
**✅ RICHTIG (EspoCRM 7.x):**
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"rows": [
|
"rows": [
|
||||||
[
|
[
|
||||||
{"name": "field1"},
|
{"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:**
|
**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!)
|
- ❌ Width-Attribute in Detail-Layouts (nur für List-Layouts!)
|
||||||
- ❌ Leere Objekte `{}` oder `false` in Rows
|
- ❌ bottomPanelsDetail.json als Array statt Objekt
|
||||||
- ❌ Index nicht angepasst nach Entfernung von Panels (bottomPanelsDetail)
|
- ❌ Index nicht angepasst nach Entfernung von Panels
|
||||||
|
|
||||||
**Best Practice:**
|
**Best Practice:**
|
||||||
|
- **Immer `{}` statt `false`** für leere Zellen in detail.json verwenden
|
||||||
- Width nur in `list.json` und `listSmall.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
|
- Nach Panel-Entfernung Indices neu nummerieren
|
||||||
|
- `_tabBreak_{index}` verwenden um Panels auf verschiedene Tabs zu verteilen
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": ":assignedUser"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "teams"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "freigeschalteteNutzer"
|
||||||
|
}
|
||||||
|
]
|
||||||
114
custom/Espo/Custom/Resources/layouts/CKndigung/detail.json
Normal file
114
custom/Espo/Custom/Resources/layouts/CKndigung/detail.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"rows": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "name",
|
||||||
|
"noLabel": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "kuendigungsart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "status"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "kuendigungsdatum"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "beendigungstermin"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "assignedUser"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
31
custom/Espo/Custom/Resources/layouts/CKndigung/list.json
Normal file
31
custom/Espo/Custom/Resources/layouts/CKndigung/list.json
Normal 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
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "name",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kuendigungsart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "status"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kuendigungsdatum"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -360,8 +360,8 @@ return [
|
|||||||
0 => 'youtube.com',
|
0 => 'youtube.com',
|
||||||
1 => 'google.com'
|
1 => 'google.com'
|
||||||
],
|
],
|
||||||
'cacheTimestamp' => 1769331937,
|
'cacheTimestamp' => 1769332527,
|
||||||
'microtime' => 1769331937.84435,
|
'microtime' => 1769332527.595512,
|
||||||
'siteUrl' => 'https://crm.bitbylaw.com',
|
'siteUrl' => 'https://crm.bitbylaw.com',
|
||||||
'fullTextSearchMinLength' => 4,
|
'fullTextSearchMinLength' => 4,
|
||||||
'appTimestamp' => 1768843902,
|
'appTimestamp' => 1768843902,
|
||||||
|
|||||||
Reference in New Issue
Block a user