Add 'beruecksichtigtePersonen' field and implement dynamic text updates in CVmhErstgespraech entity; enhance templates and localization

This commit is contained in:
2026-01-23 20:43:24 +01:00
parent 56271ca05a
commit 8700e4cd42
8 changed files with 119 additions and 20 deletions

View File

@@ -0,0 +1,3 @@
<div class="field" data-name="{{name}}">
<span class="text-muted">{{value}}</span>
</div>

View File

@@ -0,0 +1,3 @@
<div class="field" data-name="{{name}}">
<span class="text-muted">{{value}}</span>
</div>

View File

@@ -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;
}
});
});

View File

@@ -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
// 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 () {

View File

@@ -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": {

View File

@@ -154,13 +154,16 @@
"name": "streitwert"
},
{
"name": "kostenKndigungsservice"
"name": "beruecksichtigtePersonen"
},
{
"name": "ustSatz"
}
],
[
{
"name": "kostenKndigungsservice"
},
{
"name": "aussergerichtlicheGebuehren"
},
@@ -178,18 +181,20 @@
{
"name": "vorzusch1Instanz"
}
]
],
[
{
"name": "vergleich1InstanzGk"
"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"
},
{
"name": "vergleich1InstanzAnwK"
},
{
"name": "vergleich1InstanzSumme"
}
],
"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": [

View File

@@ -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,

View File

@@ -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,