Compare commits
7 Commits
56271ca05a
...
a5f1437131
| Author | SHA1 | Date | |
|---|---|---|---|
| a5f1437131 | |||
| d675d9fcb1 | |||
| 45456d8bf9 | |||
| d433a01b65 | |||
| ac6b9a87f6 | |||
| e6e44317d6 | |||
| 8700e4cd42 |
162
README.md
162
README.md
@@ -1118,3 +1118,165 @@ Um Entitäten für Portalnutzer (Contact-Entität) freizugeben, wurde ein konsis
|
|||||||
- Tab "Freigabe für" sollte immer der erste Tab im Bottom-Panel sein (index: 0)
|
- Tab "Freigabe für" sollte immer der erste Tab im Bottom-Panel sein (index: 0)
|
||||||
- Style "warning" hebt das Panel visuell hervor
|
- Style "warning" hebt das Panel visuell hervor
|
||||||
- Nach Änderungen immer Rebuild durchführen und beide Seiten der Relationship definieren
|
- Nach Änderungen immer Rebuild durchführen und beide Seiten der Relationship definieren
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Custom JavaScript & CSS Integration
|
||||||
|
|
||||||
|
### JavaScript-Module einbinden
|
||||||
|
|
||||||
|
EspoCRM verwendet AMD/RequireJS für JavaScript-Module. Custom JavaScript-Dateien werden in `client/custom/src/` abgelegt.
|
||||||
|
|
||||||
|
**Beispiel: RVG-Gebührenrechner für CVmhErstgespraech**
|
||||||
|
|
||||||
|
**1. Modul erstellen** (`client/custom/src/modules/rvg-calculator.js`):
|
||||||
|
```javascript
|
||||||
|
define('custom:modules/rvg-calculator', [], function () {
|
||||||
|
return {
|
||||||
|
kalkuliereKosten: function(streitwert, anzahlKlaeger, anzahlBeklagte, ustProzent) {
|
||||||
|
// Berechnungslogik
|
||||||
|
return { /* Ergebnisobjekt */ };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
**2. Custom Field View erstellen** (`client/custom/src/views/{entity}/fields/{fieldname}.js`):
|
||||||
|
```javascript
|
||||||
|
define('custom:views/c-vmh-erstgespraech/fields/rvg-calculated', [
|
||||||
|
'views/fields/currency',
|
||||||
|
'custom:modules/rvg-calculator'
|
||||||
|
], function (Dep, RvgCalculator) {
|
||||||
|
return Dep.extend({
|
||||||
|
setup: function () {
|
||||||
|
Dep.prototype.setup.call(this);
|
||||||
|
this.listenTo(this.model, 'change:streitwert change:anzahlVermieter', this.calculate);
|
||||||
|
this.listenTo(this.model, 'sync', this.calculate); // Initial load
|
||||||
|
},
|
||||||
|
calculate: function () {
|
||||||
|
var result = RvgCalculator.kalkuliereKosten(/*...*/);
|
||||||
|
this.model.set('kostenRaeumungsantrag', result.kostenRaeumungsantrag);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
**3. In entityDefs registrieren**:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"vergleich1InstanzGk": {
|
||||||
|
"type": "currency",
|
||||||
|
"readOnly": true,
|
||||||
|
"view": "custom:views/c-vmh-erstgespraech/fields/rvg-calculated"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wichtige Patterns:**
|
||||||
|
- `listenTo(model, 'sync', callback)` - Für initiale Berechnung beim Laden
|
||||||
|
- `listenTo(model, 'change:field1 change:field2', callback)` - Für Reaktivität
|
||||||
|
- `calculating` Flag verhindert Rekursion bei `model.set()`
|
||||||
|
- Browser-Cache: Hard Refresh (Ctrl+Shift+R) nach JS-Änderungen erforderlich
|
||||||
|
|
||||||
|
### CSS-Manipulation & Feld-Hervorhebung
|
||||||
|
|
||||||
|
EspoCRM erlaubt Custom CSS über Metadata-Registrierung.
|
||||||
|
|
||||||
|
**1. CSS-Datei erstellen** (`client/custom/css/erstgespraech-highlight.css`):
|
||||||
|
```css
|
||||||
|
/* Feld-Selektor über data-name Attribut */
|
||||||
|
.detail .cell[data-name="vorzusch1Instanz"] {
|
||||||
|
background-color: #d4edda;
|
||||||
|
padding: 10px;
|
||||||
|
border-bottom: 4px solid #28a745;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail .cell[data-name="vorzusch1Instanz"] .numeric-text {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #155724;
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**2. CSS in Metadata registrieren** (`custom/Espo/Custom/Resources/metadata/app/client.json`):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"cssList": [
|
||||||
|
"__APPEND__",
|
||||||
|
"client/custom/css/erstgespraech-highlight.css"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**3. Rebuild durchführen** - CSS wird in gecachtes Bundle integriert
|
||||||
|
|
||||||
|
**CSS-Targeting-Strategien:**
|
||||||
|
- **Feld-spezifisch:** `.cell[data-name="fieldName"]`
|
||||||
|
- **Entity-spezifisch:** `body[data-controller="CVmhErstgespraech"]`
|
||||||
|
- **View-spezifisch:** `.detail` (Detail-View), `.edit` (Edit-View), `.list` (List-View)
|
||||||
|
- **Label vs. Value:**
|
||||||
|
- `.label-text` - Feldlabel
|
||||||
|
- `.numeric-text` / `.text-default` - Feldwert
|
||||||
|
- `.field[data-name="..."]` - Field-Container
|
||||||
|
|
||||||
|
**HTML-Struktur (Referenz):**
|
||||||
|
```html
|
||||||
|
<div class="cell col-sm-4 form-group" data-name="vorzusch1Instanz">
|
||||||
|
<label class="control-label">
|
||||||
|
<span class="label-text">Vorauszuschießende Kosten I. Inst.</span>
|
||||||
|
</label>
|
||||||
|
<div class="field" data-name="vorzusch1Instanz">
|
||||||
|
<span class="numeric-text">3.067,63</span> €
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Best Practices:**
|
||||||
|
- CSS-Dateien in `client/custom/css/` oder `client/custom/modules/{module}/css/` ablegen
|
||||||
|
- `__APPEND__` verwendet um Core-CSS zu erweitern, nicht zu überschreiben
|
||||||
|
- Spezifische Selektoren verwenden um Kollisionen zu vermeiden
|
||||||
|
- Nach CSS-Änderungen: Rebuild + Hard Refresh (Browser Cache löschen)
|
||||||
|
|
||||||
|
### RVG-Gebührenrechner (CVmhErstgespraech)
|
||||||
|
|
||||||
|
**Implementierung:** Automatische Berechnung von Anwalts- und Gerichtskosten nach RVG 2025 / GKG
|
||||||
|
|
||||||
|
**Komponenten:**
|
||||||
|
1. **Calculator-Modul** (`client/custom/src/modules/rvg-calculator.js`):
|
||||||
|
- `getWertgebuehr()`: RVG 2025 Tabelle (65 Stufen, €500-€2M)
|
||||||
|
- `getGerichtsgebuehr()`: GKG progressive Berechnung
|
||||||
|
- `getZuschlag()`: §7 RVG Personenzuschlag (+0.3 pro Person, max +2.0)
|
||||||
|
- `kalkuliereKosten()`: Hauptfunktion für alle Szenarien
|
||||||
|
|
||||||
|
2. **Custom Field Views**:
|
||||||
|
- `rvg-calculated.js`: Trigger für alle Berechnungen
|
||||||
|
- `beruecksichtigte-personen.js`: Live-Text-Anzeige "X Vermieter, Y Mieter, Z Dritte"
|
||||||
|
- `warmmiete.js`: Kaltmiete + BK-Vorauszahlung + BK-Pauschale
|
||||||
|
- `streitwert.js`: (Kaltmiete + BK-Pauschale) × 12
|
||||||
|
|
||||||
|
3. **Berechnete Felder** (readOnly currency fields):
|
||||||
|
- Außergerichtliche Gebühren: 1.3 + Zuschlag + Pauschale 20% (max 20€)
|
||||||
|
- Kosten Räumungsantrag: 0.3 + 0.3/Person + Pauschale
|
||||||
|
- 1. Instanz: 3.0 GK + RA-Kosten (1.3 Verf + 1.2 Term + Pauschale)
|
||||||
|
- Säumnisszenario: 3.0 GK + reduzierte RA (0.5 Term statt 1.2)
|
||||||
|
- Vergleichsszenario: 1.0 GK + RA (1.3 Verf + 1.2 Term + 1.0 Vergl)
|
||||||
|
|
||||||
|
4. **USt-Satz Handling**:
|
||||||
|
- Enum Field: "0" / "19" (String, nicht Integer!)
|
||||||
|
- Konvertierung: `parseInt(ustSatz)` → dann `/100` im Calculator
|
||||||
|
- **Wichtig:** Expliziter Null-Check nötig, `0` ist falsy in `|| 19`
|
||||||
|
|
||||||
|
5. **Reaktivität**:
|
||||||
|
- Listener auf: streitwert, anzahlVermieter, anzahlMieter, anzahlSonstigeVolljhrigeBewohner, ustSatz
|
||||||
|
- Initial berechnen mit `'sync'` Event
|
||||||
|
- `calculating` Flag verhindert Rekursion
|
||||||
|
|
||||||
|
**Layout-Panels:**
|
||||||
|
- **Gebührenberechnung** (primary, info-note): Standard 1. Instanz Kosten
|
||||||
|
- **Säumnisszenario I. Inst.** (primary, success-note): Beklagte erscheint nicht
|
||||||
|
- **Vergleichsszenario I. Inst.** (primary, success-note): Einigung vor Urteil
|
||||||
|
|
||||||
|
**Hervorhebung:** "Vorauszuschießende Kosten I. Inst." wird via CSS hervorgehoben (grüner Hintergrund, fetter Wert)
|
||||||
25
client/custom/css/erstgespraech-highlight.css
Normal file
25
client/custom/css/erstgespraech-highlight.css
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/* Hervorhebung für vorzuschießende Kosten I. Instanz */
|
||||||
|
.detail .cell[data-name="vorzusch1Instanz"] {
|
||||||
|
background-color: #d4edda; /* Hellgrün */
|
||||||
|
padding: 10px;
|
||||||
|
border-bottom: 4px solid #28a745; /* Grüner Rand unten */
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail .cell[data-name="vorzusch1Instanz"] .numeric-text {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #155724; /* Dunkelgrün */
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail .cell[data-name="vorzusch1Instanz"] .label-text {
|
||||||
|
color: #155724;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Auch im Edit-Modus hervorheben */
|
||||||
|
.edit .cell[data-name="vorzusch1Instanz"] {
|
||||||
|
background-color: #d4edda;
|
||||||
|
padding: 10px;
|
||||||
|
border-bottom: 4px solid #28a745;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<div class="field" data-name="{{name}}">
|
||||||
|
<span class="text-muted">{{value}}</span>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<div class="field" data-name="{{name}}">
|
||||||
|
<span class="text-muted">{{value}}</span>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
define('custom:views/c-vmh-erstgespraech/fields/beruecksichtigte-personen', ['views/fields/text'], function (Dep) {
|
||||||
|
|
||||||
|
return Dep.extend({
|
||||||
|
|
||||||
|
detailTemplate: 'custom:c-vmh-erstgespraech/fields/beruecksichtigte-personen/detail',
|
||||||
|
editTemplate: 'custom:c-vmh-erstgespraech/fields/beruecksichtigte-personen/edit',
|
||||||
|
|
||||||
|
setup: function () {
|
||||||
|
Dep.prototype.setup.call(this);
|
||||||
|
|
||||||
|
this.listenTo(this.model, 'change:anzahlVermieter change:anzahlMieter change:anzahlSonstigeVolljhrigeBewohner', () => {
|
||||||
|
this.updateText();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Initial update when model is synced
|
||||||
|
this.listenTo(this.model, 'sync', () => {
|
||||||
|
this.updateText();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update immediately if data already exists
|
||||||
|
if (this.model.id) {
|
||||||
|
this.updateText();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
updateText: function () {
|
||||||
|
if (this.calculating) return;
|
||||||
|
this.calculating = true;
|
||||||
|
|
||||||
|
const vermieter = this.model.get('anzahlVermieter') || 0;
|
||||||
|
const mieter = this.model.get('anzahlMieter') || 0;
|
||||||
|
const sonstige = this.model.get('anzahlSonstigeVolljhrigeBewohner') || 0;
|
||||||
|
|
||||||
|
const text = `${vermieter} Vermieter, ${mieter} Mieter, ${sonstige} Dritte`;
|
||||||
|
|
||||||
|
this.model.set('beruecksichtigtePersonen', text, {silent: true});
|
||||||
|
|
||||||
|
this.calculating = false;
|
||||||
|
|
||||||
|
if (this.isRendered()) {
|
||||||
|
this.reRender();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
data: function () {
|
||||||
|
const data = Dep.prototype.data.call(this);
|
||||||
|
data.value = this.model.get('beruecksichtigtePersonen') || '';
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -13,8 +13,13 @@ define('custom:views/c-vmh-erstgespraech/fields/rvg-calculated', [
|
|||||||
// Listen to changes on relevant fields (combined listener)
|
// Listen to changes on relevant fields (combined listener)
|
||||||
this.listenTo(this.model, 'change:streitwert change:anzahlVermieter change:anzahlMieter change:anzahlSonstigeVolljhrigeBewohner change:ustSatz', this.calculate.bind(this));
|
this.listenTo(this.model, 'change:streitwert change:anzahlVermieter change:anzahlMieter change:anzahlSonstigeVolljhrigeBewohner change:ustSatz', this.calculate.bind(this));
|
||||||
|
|
||||||
// Initial calculation
|
// Initial calculation when model is synced
|
||||||
|
this.listenTo(this.model, 'sync', this.calculate.bind(this));
|
||||||
|
|
||||||
|
// Immediate calculation if data already exists
|
||||||
|
if (this.model.id) {
|
||||||
this.calculate();
|
this.calculate();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
calculate: function () {
|
calculate: function () {
|
||||||
|
|||||||
@@ -63,6 +63,7 @@
|
|||||||
"ustSatz": "USt-Satz",
|
"ustSatz": "USt-Satz",
|
||||||
"aussergerichtlicheGebuehren": "Außergerichtliche Gebühren",
|
"aussergerichtlicheGebuehren": "Außergerichtliche Gebühren",
|
||||||
"kostenRaeumungsantrag": "Kosten Räumungsantrag",
|
"kostenRaeumungsantrag": "Kosten Räumungsantrag",
|
||||||
|
"beruecksichtigtePersonen": "Berücksichtigte Personen",
|
||||||
"gerichtskosten1Instanz": "GK-Kosten I. Inst.",
|
"gerichtskosten1Instanz": "GK-Kosten I. Inst.",
|
||||||
"anwaltskostenKlaeger1Instanz": "RA-Kosten Kläger I. Inst.",
|
"anwaltskostenKlaeger1Instanz": "RA-Kosten Kläger I. Inst.",
|
||||||
"vorzusch1Instanz": "Vorauszuschießende Kosten I. Inst.",
|
"vorzusch1Instanz": "Vorauszuschießende Kosten I. Inst.",
|
||||||
@@ -96,7 +97,8 @@
|
|||||||
"erstberaterEinschtzungDISGTyp": "Dominant = Schnelles Tempo, fordernder Ton, Fokus auf Ergebnisse.\\n\\nInitiativ = Hohe Sprechgeschwindigkeit, emotionale Sprache, sucht Bestätigung.\\n\\nStetig = Langsames Tempo, zögernde Pausen, risikoscheu.\\n\\nGewissenhaft = Präzise Formulierungen, sucht Daten, skeptisch.",
|
"erstberaterEinschtzungDISGTyp": "Dominant = Schnelles Tempo, fordernder Ton, Fokus auf Ergebnisse.\\n\\nInitiativ = Hohe Sprechgeschwindigkeit, emotionale Sprache, sucht Bestätigung.\\n\\nStetig = Langsames Tempo, zögernde Pausen, risikoscheu.\\n\\nGewissenhaft = Präzise Formulierungen, sucht Daten, skeptisch.",
|
||||||
"auergerichtlicheGesetzlicheGebhren": "Die gesetzlichen Gebühren für eine außergerichtliche Tätigkeit",
|
"auergerichtlicheGesetzlicheGebhren": "Die gesetzlichen Gebühren für eine außergerichtliche Tätigkeit",
|
||||||
"kndigungsfristMietverhltnis": "Zeitpunkt zu dem das Mietverhältnis beendet wurde. Bei mehreren Fristen (bspw. fristlose und fristgerechte Kündigung) frühester Zeitpunt.",
|
"kndigungsfristMietverhltnis": "Zeitpunkt zu dem das Mietverhältnis beendet wurde. Bei mehreren Fristen (bspw. fristlose und fristgerechte Kündigung) frühester Zeitpunt.",
|
||||||
"nchsterAnruf": "Nächster Anruf nicht vor"
|
"nchsterAnruf": "Nächster Anruf nicht vor",
|
||||||
|
"kostenKndigungsservice": "Individuell vereinbarte Pauschale für außergerichtliche Kündigung."
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
"status": {
|
"status": {
|
||||||
|
|||||||
@@ -1,5 +1,15 @@
|
|||||||
[
|
[
|
||||||
{"name": "name"},
|
{
|
||||||
{"name": "iban"},
|
"name": "name",
|
||||||
{"name": "istAktiv"}
|
"link": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "iban"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kontoinhaber"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "istAktiv"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -60,5 +60,13 @@
|
|||||||
},
|
},
|
||||||
"dokumentesBeteiligte": {
|
"dokumentesBeteiligte": {
|
||||||
"index": 12
|
"index": 12
|
||||||
|
},
|
||||||
|
"_tabBreak_5": {
|
||||||
|
"index": 13,
|
||||||
|
"tabBreak": true,
|
||||||
|
"tabLabel": "Bankverbindungen"
|
||||||
|
},
|
||||||
|
"bankverbindungens": {
|
||||||
|
"index": 14
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "name",
|
||||||
|
"link": true,
|
||||||
|
"width": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "iban",
|
||||||
|
"width": 25
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "bic",
|
||||||
|
"width": 15
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kontoinhaber",
|
||||||
|
"width": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "istAktiv",
|
||||||
|
"width": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "istStandard",
|
||||||
|
"width": 10
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -154,13 +154,16 @@
|
|||||||
"name": "streitwert"
|
"name": "streitwert"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "kostenKndigungsservice"
|
"name": "beruecksichtigtePersonen"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ustSatz"
|
"name": "ustSatz"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
{
|
||||||
|
"name": "kostenKndigungsservice"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "aussergerichtlicheGebuehren"
|
"name": "aussergerichtlicheGebuehren"
|
||||||
},
|
},
|
||||||
@@ -178,18 +181,20 @@
|
|||||||
{
|
{
|
||||||
"name": "vorzusch1Instanz"
|
"name": "vorzusch1Instanz"
|
||||||
}
|
}
|
||||||
|
]
|
||||||
],
|
],
|
||||||
[
|
"dynamicLogicVisible": null,
|
||||||
{
|
"style": "primary",
|
||||||
"name": "vergleich1InstanzGk"
|
"dynamicLogicStyled": null,
|
||||||
|
"tabBreak": false,
|
||||||
|
"tabLabel": null,
|
||||||
|
"hidden": false,
|
||||||
|
"noteText": "Die Gebühren werden automatisch nach RVG 2025 berechnet basierend auf Streitwert, Personenanzahl und USt-Satz.",
|
||||||
|
"noteStyle": "info",
|
||||||
|
"customLabel": "Gebührenberechnung"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "vergleich1InstanzAnwK"
|
"rows": [
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "vergleich1InstanzSumme"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "saeumnis1InstanzGk"
|
"name": "saeumnis1InstanzGk"
|
||||||
@@ -208,9 +213,33 @@
|
|||||||
"tabBreak": false,
|
"tabBreak": false,
|
||||||
"tabLabel": null,
|
"tabLabel": null,
|
||||||
"hidden": false,
|
"hidden": false,
|
||||||
"noteText": "Die Gebühren werden automatisch nach RVG 2025 berechnet basierend auf Streitwert, Personenanzahl und USt-Satz.",
|
"noteText": "Säumnisszenario: Der Beklagte erscheint nicht zum Termin. Terminsgebühr wird auf 0,5 reduziert, Gerichtskosten bleiben bei 3,0.",
|
||||||
"noteStyle": "success",
|
"noteStyle": "success",
|
||||||
"customLabel": "Gebührenberechnung"
|
"customLabel": "Säumnisszenario I. Inst."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"rows": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "vergleich1InstanzGk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "vergleich1InstanzAnwK"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "vergleich1InstanzSumme"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"dynamicLogicVisible": null,
|
||||||
|
"style": "primary",
|
||||||
|
"dynamicLogicStyled": null,
|
||||||
|
"tabBreak": false,
|
||||||
|
"tabLabel": null,
|
||||||
|
"hidden": false,
|
||||||
|
"noteText": "Vergleichsszenario: Einigung vor Urteil. Vergleichsgebühr 1,0 kommt zusätzlich zur Terminsgebühr hinzu, Gerichtskosten nur 1,0 statt 3,0.",
|
||||||
|
"noteStyle": "success",
|
||||||
|
"customLabel": "Vergleichsszenario I. Inst."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"rows": [
|
"rows": [
|
||||||
|
|||||||
6
custom/Espo/Custom/Resources/metadata/app/client.json
Normal file
6
custom/Espo/Custom/Resources/metadata/app/client.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"cssList": [
|
||||||
|
"__APPEND__",
|
||||||
|
"client/custom/css/erstgespraech-highlight.css"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -238,6 +238,10 @@
|
|||||||
"dokumentesBeteiligte": {
|
"dokumentesBeteiligte": {
|
||||||
"layout": null,
|
"layout": null,
|
||||||
"selectPrimaryFilterName": null
|
"selectPrimaryFilterName": null
|
||||||
|
},
|
||||||
|
"bankverbindungens": {
|
||||||
|
"layout": null,
|
||||||
|
"selectPrimaryFilterName": null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -43,7 +43,8 @@
|
|||||||
},
|
},
|
||||||
"adresse": {
|
"adresse": {
|
||||||
"type": "address",
|
"type": "address",
|
||||||
"isCustom": true
|
"isCustom": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"isActive": {
|
"isActive": {
|
||||||
"type": "bool",
|
"type": "bool",
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
"type": "varchar",
|
"type": "varchar",
|
||||||
"required": true,
|
"required": true,
|
||||||
"pattern": "$noBadCharacters",
|
"pattern": "$noBadCharacters",
|
||||||
"tooltip": true
|
"tooltip": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"iban": {
|
"iban": {
|
||||||
"type": "varchar",
|
"type": "varchar",
|
||||||
@@ -20,21 +21,24 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"maxLength": 11,
|
"maxLength": 11,
|
||||||
"tooltip": true,
|
"tooltip": true,
|
||||||
"isCustom": true
|
"isCustom": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"kontoinhaber": {
|
"kontoinhaber": {
|
||||||
"type": "varchar",
|
"type": "varchar",
|
||||||
"required": false,
|
"required": false,
|
||||||
"maxLength": 255,
|
"maxLength": 255,
|
||||||
"tooltip": true,
|
"tooltip": true,
|
||||||
"isCustom": true
|
"isCustom": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"bankname": {
|
"bankname": {
|
||||||
"type": "varchar",
|
"type": "varchar",
|
||||||
"required": false,
|
"required": false,
|
||||||
"maxLength": 255,
|
"maxLength": 255,
|
||||||
"tooltip": true,
|
"tooltip": true,
|
||||||
"isCustom": true
|
"isCustom": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"istAktiv": {
|
"istAktiv": {
|
||||||
"type": "bool",
|
"type": "bool",
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
"fields": {
|
"fields": {
|
||||||
"name": {
|
"name": {
|
||||||
"type": "personName",
|
"type": "personName",
|
||||||
"isPersonalData": true
|
"isPersonalData": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"salutationName": {
|
"salutationName": {
|
||||||
"type": "enum",
|
"type": "enum",
|
||||||
@@ -42,23 +43,27 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"maxLength": 255,
|
"maxLength": 255,
|
||||||
"tooltip": true,
|
"tooltip": true,
|
||||||
"isCustom": true
|
"isCustom": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"firstName": {
|
"firstName": {
|
||||||
"type": "varchar",
|
"type": "varchar",
|
||||||
"maxLength": 100
|
"maxLength": 100,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"lastName": {
|
"lastName": {
|
||||||
"type": "varchar",
|
"type": "varchar",
|
||||||
"maxLength": 100,
|
"maxLength": 100,
|
||||||
"required": true
|
"required": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"type": "text"
|
"type": "text"
|
||||||
},
|
},
|
||||||
"emailAddress": {
|
"emailAddress": {
|
||||||
"type": "email",
|
"type": "email",
|
||||||
"isPersonalData": true
|
"isPersonalData": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"phoneNumber": {
|
"phoneNumber": {
|
||||||
"type": "phone",
|
"type": "phone",
|
||||||
@@ -70,7 +75,8 @@
|
|||||||
"Other"
|
"Other"
|
||||||
],
|
],
|
||||||
"defaultType": "Mobile",
|
"defaultType": "Mobile",
|
||||||
"isPersonalData": true
|
"isPersonalData": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"createdAt": {
|
"createdAt": {
|
||||||
"type": "datetime",
|
"type": "datetime",
|
||||||
@@ -140,7 +146,8 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"maxLength": 50,
|
"maxLength": 50,
|
||||||
"tooltip": true,
|
"tooltip": true,
|
||||||
"isCustom": true
|
"isCustom": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"handelsregisterArt": {
|
"handelsregisterArt": {
|
||||||
"type": "enum",
|
"type": "enum",
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
"pattern": "$noBadCharacters"
|
"pattern": "$noBadCharacters"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"type": "text"
|
"type": "text",
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"createdAt": {
|
"createdAt": {
|
||||||
"type": "datetime",
|
"type": "datetime",
|
||||||
@@ -70,7 +71,8 @@
|
|||||||
"maxLength": 64,
|
"maxLength": 64,
|
||||||
"readOnlyAfterCreate": true,
|
"readOnlyAfterCreate": true,
|
||||||
"options": [],
|
"options": [],
|
||||||
"isCustom": true
|
"isCustom": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"betnr": {
|
"betnr": {
|
||||||
"type": "int",
|
"type": "int",
|
||||||
|
|||||||
@@ -37,7 +37,8 @@
|
|||||||
},
|
},
|
||||||
"anschrift": {
|
"anschrift": {
|
||||||
"type": "address",
|
"type": "address",
|
||||||
"isCustom": true
|
"isCustom": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"objekttyp": {
|
"objekttyp": {
|
||||||
"type": "enum",
|
"type": "enum",
|
||||||
|
|||||||
@@ -445,6 +445,12 @@
|
|||||||
"decimal": true,
|
"decimal": true,
|
||||||
"isCustom": true
|
"isCustom": true
|
||||||
},
|
},
|
||||||
|
"beruecksichtigtePersonen": {
|
||||||
|
"type": "text",
|
||||||
|
"readOnly": true,
|
||||||
|
"view": "custom:views/c-vmh-erstgespraech/fields/beruecksichtigte-personen",
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
"gerichtskosten1Instanz": {
|
"gerichtskosten1Instanz": {
|
||||||
"type": "currency",
|
"type": "currency",
|
||||||
"readOnly": true,
|
"readOnly": true,
|
||||||
|
|||||||
@@ -57,7 +57,8 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"maxLength": 100,
|
"maxLength": 100,
|
||||||
"tooltip": true,
|
"tooltip": true,
|
||||||
"isCustom": true
|
"isCustom": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"betnr": {
|
"betnr": {
|
||||||
"type": "int",
|
"type": "int",
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
"fields": {
|
"fields": {
|
||||||
"name": {
|
"name": {
|
||||||
"type": "personName",
|
"type": "personName",
|
||||||
"isPersonalData": true
|
"isPersonalData": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"salutationName": {
|
"salutationName": {
|
||||||
"type": "enum",
|
"type": "enum",
|
||||||
@@ -14,7 +15,8 @@
|
|||||||
"maxLength": 100,
|
"maxLength": 100,
|
||||||
"audited": true,
|
"audited": true,
|
||||||
"options": [],
|
"options": [],
|
||||||
"isPersonalData": true
|
"isPersonalData": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"lastName": {
|
"lastName": {
|
||||||
"type": "varchar",
|
"type": "varchar",
|
||||||
@@ -22,7 +24,8 @@
|
|||||||
"required": true,
|
"required": true,
|
||||||
"isPersonalData": true,
|
"isPersonalData": true,
|
||||||
"audited": true,
|
"audited": true,
|
||||||
"options": []
|
"options": [],
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"type": "text"
|
"type": "text"
|
||||||
@@ -31,7 +34,8 @@
|
|||||||
"notStorable": true,
|
"notStorable": true,
|
||||||
"type": "email",
|
"type": "email",
|
||||||
"isPersonalData": true,
|
"isPersonalData": true,
|
||||||
"audited": true
|
"audited": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"phoneNumber": {
|
"phoneNumber": {
|
||||||
"type": "phone",
|
"type": "phone",
|
||||||
@@ -43,39 +47,46 @@
|
|||||||
"Other"
|
"Other"
|
||||||
],
|
],
|
||||||
"defaultType": "Mobile",
|
"defaultType": "Mobile",
|
||||||
"isPersonalData": true
|
"isPersonalData": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"address": {
|
"address": {
|
||||||
"type": "address",
|
"type": "address",
|
||||||
"isPersonalData": true,
|
"isPersonalData": true,
|
||||||
"viewMap": false
|
"viewMap": false,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"addressStreet": {
|
"addressStreet": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"maxLength": 255,
|
"maxLength": 255,
|
||||||
"dbType": "varchar",
|
"dbType": "varchar",
|
||||||
"audited": true,
|
"audited": true,
|
||||||
"isPersonalData": true
|
"isPersonalData": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"addressCity": {
|
"addressCity": {
|
||||||
"type": "varchar",
|
"type": "varchar",
|
||||||
"audited": true,
|
"audited": true,
|
||||||
"isPersonalData": true
|
"isPersonalData": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"addressState": {
|
"addressState": {
|
||||||
"type": "varchar",
|
"type": "varchar",
|
||||||
"audited": true
|
"audited": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"addressCountry": {
|
"addressCountry": {
|
||||||
"type": "varchar",
|
"type": "varchar",
|
||||||
"audited": true,
|
"audited": true,
|
||||||
"isPersonalData": true
|
"isPersonalData": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"addressPostalCode": {
|
"addressPostalCode": {
|
||||||
"type": "varchar",
|
"type": "varchar",
|
||||||
"audited": true,
|
"audited": true,
|
||||||
"options": [],
|
"options": [],
|
||||||
"isPersonalData": true
|
"isPersonalData": true,
|
||||||
|
"copyToClipboard": true
|
||||||
},
|
},
|
||||||
"createdAt": {
|
"createdAt": {
|
||||||
"type": "datetime",
|
"type": "datetime",
|
||||||
|
|||||||
@@ -349,8 +349,8 @@ return [
|
|||||||
0 => 'youtube.com',
|
0 => 'youtube.com',
|
||||||
1 => 'google.com'
|
1 => 'google.com'
|
||||||
],
|
],
|
||||||
'cacheTimestamp' => 1769195678,
|
'cacheTimestamp' => 1769200199,
|
||||||
'microtime' => 1769195678.710132,
|
'microtime' => 1769200199.876961,
|
||||||
'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