Add termination (Kündigung) functionality and related translations

- Implemented the ability to initiate terminations from Mietverhältnisse.
- Added new fields and options for terminations in both German and English language files.
- Updated metadata definitions to include relationships for terminations with Mietobjekte and Beteiligte.
- Enhanced the service layer to handle termination creation, including linking relevant entities and copying documents.
- Updated configuration timestamps for deployment.
This commit is contained in:
2026-01-25 10:06:02 +01:00
parent 07ff3c5c54
commit 30326da8c6
23 changed files with 771 additions and 18 deletions

View File

@@ -33,5 +33,31 @@
}
]
},
"iconClass": "fas fa-circle-stop"
"iconClass": "fas fa-file-contract",
"relationshipPanels": {
"vmhMietverhltnises": {
"layout": null,
"selectPrimaryFilterName": null
},
"mietobjekte": {
"layout": null,
"selectPrimaryFilterName": null
},
"kuendiger": {
"layout": null,
"selectPrimaryFilterName": null
},
"gekuendigte": {
"layout": null,
"selectPrimaryFilterName": null
},
"dokumenteskuendigung": {
"layout": null,
"selectPrimaryFilterName": null
},
"contactsKuendigung": {
"layout": null,
"selectPrimaryFilterName": "portalUsers"
}
}
}

View File

@@ -25,6 +25,16 @@
"iconHtml": "<span class=\"fas fa-euro-sign\"></span>",
"style": "warning",
"acl": "edit"
},
{
"name": "initiateTermination",
"label": "Initiate Termination",
"handler": "custom:handlers/mietverhaeltnis/termination-action",
"initFunction": "initInitiateTermination",
"actionFunction": "actionInitiateTermination",
"iconHtml": "<span class=\"fas fa-file-contract\"></span>",
"style": "primary",
"acl": "edit"
}
]
}

View File

@@ -294,6 +294,22 @@
"audited": false,
"isCustom": true
},
"kndigungenKuendiger": {
"type": "hasMany",
"relationName": "cBeteiligteKuendigungKuendiger",
"foreign": "kuendiger",
"entity": "CKndigung",
"audited": false,
"isCustom": true
},
"kndigungenGekuendigte": {
"type": "hasMany",
"relationName": "cBeteiligteKuendigungGekuendigte",
"foreign": "gekuendigte",
"entity": "CKndigung",
"audited": false,
"isCustom": true
},
"dokumentesBeteiligte": {
"type": "hasMany",
"relationName": "cBeteiligteDokumente",

View File

@@ -176,6 +176,14 @@
"audited": false,
"isCustom": true
},
"kndigungensdokumente": {
"type": "hasMany",
"relationName": "cDokumenteKuendigung",
"foreign": "dokumenteskuendigung",
"entity": "CKndigung",
"audited": false,
"isCustom": true
},
"beteiligte2dokumente": {
"type": "hasMany",
"relationName": "cBeteiligteDokumente",

View File

@@ -34,6 +34,176 @@
"teams": {
"type": "linkMultiple",
"view": "views/fields/teams"
},
"freigeschalteteNutzer": {
"type": "link"
},
"collaborators": {
"type": "linkMultiple",
"view": "views/fields/collaborators",
"maxCount": 30,
"fieldManagerParamList": [
"readOnly",
"readOnlyAfterCreate",
"audited",
"autocompleteOnEmpty",
"maxCount",
"inlineEditDisabled",
"tooltipText"
]
},
"advowareAktenzeichen": {
"type": "varchar",
"required": false,
"maxLength": 100,
"tooltip": true,
"isCustom": true,
"copyToClipboard": true
},
"betnr": {
"type": "int",
"required": false,
"tooltip": true,
"isCustom": true
},
"advowareLastSync": {
"type": "datetime",
"required": false,
"readOnly": true,
"tooltip": true,
"isCustom": true
},
"syncStatus": {
"type": "enum",
"required": false,
"options": [
"clean",
"unclean",
"failed"
],
"style": {
"clean": "success",
"unclean": "warning",
"failed": "danger"
},
"default": "clean",
"tooltip": true,
"isCustom": true
},
"kuendigungsart": {
"type": "enum",
"required": false,
"options": [
"Ordentlich",
"Ausserordentlich",
"Fristlos",
"AufgabeerklärungMieter"
],
"default": "Ordentlich",
"isCustom": true
},
"kuendigungsgrund": {
"type": "enum",
"required": false,
"options": [
"Zahlungsverzug",
"Pflichtverletzung",
"Eigenbedarf",
"Verwertung",
"VerhaltensbedingteLaermruhestoerung",
"BeschaedigungSubstanz",
"UnerlaubteUntervermietung",
"StoerendeGeschaeftsfuehrung",
"Sonstiges"
],
"isCustom": true
},
"kuendigungsgrundDetails": {
"type": "text",
"required": false,
"isCustom": true
},
"kuendigungsdatum": {
"type": "date",
"required": false,
"isCustom": true
},
"zustelldatum": {
"type": "date",
"required": false,
"isCustom": true
},
"kuendigungsfrist": {
"type": "varchar",
"required": false,
"maxLength": 50,
"isCustom": true
},
"beendigungstermin": {
"type": "date",
"required": false,
"isCustom": true
},
"status": {
"type": "enum",
"required": false,
"options": [
"Entwurf",
"Versendet",
"Zugestellt",
"Akzeptiert",
"Bestritten",
"Abgewickelt",
"Zurückgezogen"
],
"default": "Entwurf",
"isCustom": true
},
"zustellart": {
"type": "enum",
"required": false,
"options": [
"Einschreiben",
"Persoenlich",
"Gerichtsvollzieher",
"Oeffentlich",
"Sonstiges"
],
"isCustom": true
},
"reaktionMieter": {
"type": "text",
"required": false,
"isCustom": true
},
"notizen": {
"type": "text",
"required": false,
"isCustom": true
},
"rueckstandMiete": {
"type": "currency",
"required": false,
"default": 0,
"isCustom": true
},
"rueckstandNebenkosten": {
"type": "currency",
"required": false,
"default": 0,
"isCustom": true
},
"sonstigeForderungen": {
"type": "currency",
"required": false,
"default": 0,
"isCustom": true
},
"aussergerichtlicheGebuehren13": {
"type": "currency",
"required": false,
"default": 0,
"isCustom": true
}
},
"links": {
@@ -75,11 +245,77 @@
"entity": "Email",
"foreign": "parent",
"layoutRelationshipsDisabled": true
},
"vmhMietverhltnises": {
"type": "hasMany",
"relationName": "cKuendigungVmhMietverhltnis",
"foreign": "kndigungen",
"entity": "CVmhMietverhltnis",
"audited": false,
"isCustom": true
},
"mietobjekte": {
"type": "hasMany",
"relationName": "cMietobjektKuendigung",
"foreign": "kndigungen",
"entity": "CMietobjekt",
"audited": false,
"isCustom": true
},
"freigeschalteteNutzer": {
"type": "belongsTo",
"foreign": "cKndigungen",
"entity": "Contact",
"audited": false,
"isCustom": true
},
"collaborators": {
"type": "hasMany",
"entity": "User",
"relationName": "entityCollaborator",
"layoutRelationshipsDisabled": true
},
"dokumenteskuendigung": {
"type": "hasMany",
"relationName": "cDokumenteKuendigung",
"foreign": "kndigungensdokumente",
"entity": "CDokumente",
"audited": false,
"isCustom": true
},
"contactsKuendigung": {
"type": "hasMany",
"relationName": "cKuendigungContact",
"foreign": "cKuendigungContact",
"entity": "Contact",
"audited": false,
"isCustom": true
},
"kuendiger": {
"type": "hasMany",
"relationName": "cBeteiligteKuendigungKuendiger",
"foreign": "kndigungenKuendiger",
"entity": "CBeteiligte",
"audited": false,
"isCustom": true
},
"gekuendigte": {
"type": "hasMany",
"relationName": "cBeteiligteKuendigungGekuendigte",
"foreign": "kndigungenGekuendigte",
"entity": "CBeteiligte",
"audited": false,
"isCustom": true
}
},
"collection": {
"orderBy": "createdAt",
"order": "desc"
"order": "desc",
"textFilterFields": [
"name"
],
"fullTextSearch": false,
"countDisabled": false
},
"indexes": {
"name": {
@@ -105,6 +341,39 @@
"createdAt",
"id"
]
},
"betnr": {
"columns": [
"betnr"
]
},
"advowareAktenzeichen": {
"columns": [
"advowareAktenzeichen"
]
},
"status": {
"columns": [
"status",
"deleted"
]
},
"kuendigungsdatum": {
"columns": [
"kuendigungsdatum"
]
},
"beendigungstermin": {
"columns": [
"beendigungstermin"
]
},
"syncStatus": {
"columns": [
"syncStatus",
"deleted"
]
}
}
},
"optimisticConcurrencyControl": false
}

View File

@@ -157,6 +157,14 @@
"entity": "CMietinkasso",
"audited": false,
"isCustom": true
},
"kndigungen": {
"type": "hasMany",
"relationName": "cMietobjektKuendigung",
"foreign": "mietobjekte",
"entity": "CKndigung",
"audited": false,
"isCustom": true
}
},
"collection": {

View File

@@ -234,6 +234,14 @@
"audited": false,
"isCustom": true
},
"kndigungen": {
"type": "hasMany",
"relationName": "cKuendigungVmhMietverhltnis",
"foreign": "vmhMietverhltnises",
"entity": "CKndigung",
"audited": false,
"isCustom": true
},
"vmhbeteiligtevermieter": {
"type": "hasMany",
"relationName": "cBeteiligteVmhMietverhltnis",

View File

@@ -94,6 +94,14 @@
"audited": false,
"isCustom": true
},
"cKuendigungContact": {
"type": "hasMany",
"relationName": "cKuendigungContact",
"foreign": "contactsKuendigung",
"entity": "CKndigung",
"audited": false,
"isCustom": true
},
"cBankverbindungenContact": {
"type": "hasMany",
"relationName": "cBankverbindungContact",