diff --git a/client/custom/res/templates/c-vmh-erstgespraech/fields/beruecksichtigte-personen/detail.tpl b/client/custom/res/templates/c-vmh-erstgespraech/fields/beruecksichtigte-personen/detail.tpl new file mode 100644 index 00000000..9d5e3e9b --- /dev/null +++ b/client/custom/res/templates/c-vmh-erstgespraech/fields/beruecksichtigte-personen/detail.tpl @@ -0,0 +1,3 @@ +
+ {{value}} +
diff --git a/client/custom/res/templates/c-vmh-erstgespraech/fields/beruecksichtigte-personen/edit.tpl b/client/custom/res/templates/c-vmh-erstgespraech/fields/beruecksichtigte-personen/edit.tpl new file mode 100644 index 00000000..9d5e3e9b --- /dev/null +++ b/client/custom/res/templates/c-vmh-erstgespraech/fields/beruecksichtigte-personen/edit.tpl @@ -0,0 +1,3 @@ +
+ {{value}} +
diff --git a/client/custom/src/views/c-vmh-erstgespraech/fields/beruecksichtigte-personen.js b/client/custom/src/views/c-vmh-erstgespraech/fields/beruecksichtigte-personen.js new file mode 100644 index 00000000..3de091c2 --- /dev/null +++ b/client/custom/src/views/c-vmh-erstgespraech/fields/beruecksichtigte-personen.js @@ -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; + } + }); +}); diff --git a/client/custom/src/views/c-vmh-erstgespraech/fields/rvg-calculated.js b/client/custom/src/views/c-vmh-erstgespraech/fields/rvg-calculated.js index 3bbf7aa8..f093dfb2 100644 --- a/client/custom/src/views/c-vmh-erstgespraech/fields/rvg-calculated.js +++ b/client/custom/src/views/c-vmh-erstgespraech/fields/rvg-calculated.js @@ -13,8 +13,13 @@ define('custom:views/c-vmh-erstgespraech/fields/rvg-calculated', [ // 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)); - // Initial calculation - this.calculate(); + // 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(); + } }, calculate: function () { diff --git a/custom/Espo/Custom/Resources/i18n/de_DE/CVmhErstgespraech.json b/custom/Espo/Custom/Resources/i18n/de_DE/CVmhErstgespraech.json index 5cac2368..430c0b24 100644 --- a/custom/Espo/Custom/Resources/i18n/de_DE/CVmhErstgespraech.json +++ b/custom/Espo/Custom/Resources/i18n/de_DE/CVmhErstgespraech.json @@ -63,6 +63,7 @@ "ustSatz": "USt-Satz", "aussergerichtlicheGebuehren": "Außergerichtliche Gebühren", "kostenRaeumungsantrag": "Kosten Räumungsantrag", + "beruecksichtigtePersonen": "Berücksichtigte Personen", "gerichtskosten1Instanz": "GK-Kosten I. Inst.", "anwaltskostenKlaeger1Instanz": "RA-Kosten Kläger 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.", "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.", - "nchsterAnruf": "Nächster Anruf nicht vor" + "nchsterAnruf": "Nächster Anruf nicht vor", + "kostenKndigungsservice": "Individuell vereinbarte Pauschale für außergerichtliche Kündigung." }, "options": { "status": { diff --git a/custom/Espo/Custom/Resources/layouts/CVmhErstgespraech/detail.json b/custom/Espo/Custom/Resources/layouts/CVmhErstgespraech/detail.json index 5a90d201..60e9eb09 100644 --- a/custom/Espo/Custom/Resources/layouts/CVmhErstgespraech/detail.json +++ b/custom/Espo/Custom/Resources/layouts/CVmhErstgespraech/detail.json @@ -154,13 +154,16 @@ "name": "streitwert" }, { - "name": "kostenKndigungsservice" + "name": "beruecksichtigtePersonen" }, { "name": "ustSatz" } ], [ + { + "name": "kostenKndigungsservice" + }, { "name": "aussergerichtlicheGebuehren" }, @@ -178,18 +181,20 @@ { "name": "vorzusch1Instanz" } - ], - [ - { - "name": "vergleich1InstanzGk" - }, - { - "name": "vergleich1InstanzAnwK" - }, - { - "name": "vergleich1InstanzSumme" - } - ], + ] + ], + "dynamicLogicVisible": null, + "style": "primary", + "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": "danger", + "customLabel": "Gebührenberechnung" + }, + { + "rows": [ [ { "name": "saeumnis1InstanzGk" @@ -208,9 +213,33 @@ "tabBreak": false, "tabLabel": null, "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", - "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": [ diff --git a/custom/Espo/Custom/Resources/metadata/entityDefs/CVmhErstgespraech.json b/custom/Espo/Custom/Resources/metadata/entityDefs/CVmhErstgespraech.json index 14671630..2c97d66f 100644 --- a/custom/Espo/Custom/Resources/metadata/entityDefs/CVmhErstgespraech.json +++ b/custom/Espo/Custom/Resources/metadata/entityDefs/CVmhErstgespraech.json @@ -445,6 +445,12 @@ "decimal": true, "isCustom": true }, + "beruecksichtigtePersonen": { + "type": "text", + "readOnly": true, + "view": "custom:views/c-vmh-erstgespraech/fields/beruecksichtigte-personen", + "isCustom": true + }, "gerichtskosten1Instanz": { "type": "currency", "readOnly": true, diff --git a/data/config.php b/data/config.php index 60136690..8ed4efd5 100644 --- a/data/config.php +++ b/data/config.php @@ -349,8 +349,8 @@ return [ 0 => 'youtube.com', 1 => 'google.com' ], - 'cacheTimestamp' => 1769195678, - 'microtime' => 1769195678.710132, + 'cacheTimestamp' => 1769197109, + 'microtime' => 1769197109.316755, 'siteUrl' => 'https://crm.bitbylaw.com', 'fullTextSearchMinLength' => 4, 'appTimestamp' => 1768843902,