feat: Add termination functionality for rental agreements
- Introduced new entity `CKuendigung` for managing terminations. - Added fields for termination details including date, reason, type, and status. - Implemented backend service to initiate terminations from rental agreements. - Created frontend handler for termination actions with confirmation dialog. - Updated metadata and layouts for `CKuendigung` to support new functionality. - Added internationalization support for English and German languages. - Enhanced existing entities to establish relationships with terminations.
This commit is contained in:
@@ -0,0 +1,70 @@
|
|||||||
|
define('custom:handlers/mietverhaeltnis/termination-action', [], function () {
|
||||||
|
|
||||||
|
class TerminationActionHandler {
|
||||||
|
|
||||||
|
constructor(view) {
|
||||||
|
this.view = view;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup-Methode wird automatisch aufgerufen
|
||||||
|
*/
|
||||||
|
initInitiateTermination() {
|
||||||
|
// Optional: Button-Logik nach Render
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action-Handler (wird bei Button-Click aufgerufen)
|
||||||
|
*/
|
||||||
|
actionInitiateTermination() {
|
||||||
|
console.log('actionInitiateTermination called');
|
||||||
|
const model = this.view.model;
|
||||||
|
|
||||||
|
// Confirmation Dialog
|
||||||
|
this.view.confirm(
|
||||||
|
this.view.translate('confirmTermination', 'messages', 'CVmhMietverhltnis'),
|
||||||
|
() => {
|
||||||
|
console.log('Confirmation accepted, initiating termination');
|
||||||
|
this.initiateTermination(model.id);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AJAX Request zum Backend
|
||||||
|
*/
|
||||||
|
initiateTermination(mietverhaeltnisId) {
|
||||||
|
Espo.Ui.notify(this.view.translate('pleaseWait', 'messages'));
|
||||||
|
|
||||||
|
Espo.Ajax.postRequest('CVmhMietverhltnis/action/initiateTermination', {
|
||||||
|
id: mietverhaeltnisId
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
Espo.Ui.success(
|
||||||
|
this.view.translate('terminationCreated', 'messages', 'CVmhMietverhltnis')
|
||||||
|
);
|
||||||
|
|
||||||
|
// Navigation zur erstellten Kündigung
|
||||||
|
this.view.getRouter().navigate(
|
||||||
|
'#CKuendigung/view/' + response.id,
|
||||||
|
{trigger: true}
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.catch(xhr => {
|
||||||
|
console.error('Termination initiation failed:', xhr);
|
||||||
|
|
||||||
|
let errorMessage = this.view.translate('terminationError', 'messages', 'CVmhMietverhltnis');
|
||||||
|
|
||||||
|
if (xhr.status === 403) {
|
||||||
|
errorMessage = this.view.translate('Access denied', 'messages');
|
||||||
|
} else if (xhr.status === 404) {
|
||||||
|
errorMessage = this.view.translate('Not found', 'messages');
|
||||||
|
}
|
||||||
|
|
||||||
|
Espo.Ui.error(errorMessage);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TerminationActionHandler;
|
||||||
|
});
|
||||||
@@ -42,4 +42,22 @@ class CVmhMietverhltnis extends \Espo\Core\Templates\Controllers\BasePlus
|
|||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* POST Action: Initiate termination from Mietverhältnis
|
||||||
|
*/
|
||||||
|
public function postActionInitiateTermination(Request $request): array
|
||||||
|
{
|
||||||
|
$data = $request->getParsedBody();
|
||||||
|
|
||||||
|
$id = $data->id ?? null;
|
||||||
|
if (!$id) {
|
||||||
|
throw new BadRequest('No Mietverhältnis ID provided');
|
||||||
|
}
|
||||||
|
|
||||||
|
$service = $this->getRecordService();
|
||||||
|
$result = $service->initiateTermination($id);
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
"vmhRumungsklagesBeklagte": "Beklagte",
|
"vmhRumungsklagesBeklagte": "Beklagte",
|
||||||
"mietinkassosKlaeger": "Mietinkasso (Kläger)",
|
"mietinkassosKlaeger": "Mietinkasso (Kläger)",
|
||||||
"mietinkassosBeklagte": "Mietinkasso (Beklagte)",
|
"mietinkassosBeklagte": "Mietinkasso (Beklagte)",
|
||||||
|
"kuendigungenVermieter": "Kündigungen (Vermieter)",
|
||||||
|
"kuendigungenMieter": "Kündigungen (Mieter)",
|
||||||
"adressens": "Adressen",
|
"adressens": "Adressen",
|
||||||
"calls1": "Anrufe",
|
"calls1": "Anrufe",
|
||||||
"contactsBeteiligte": "Freigegebene Nutzer",
|
"contactsBeteiligte": "Freigegebene Nutzer",
|
||||||
@@ -33,6 +35,8 @@
|
|||||||
"vmhRumungsklagesBeklagte": "Beklagte",
|
"vmhRumungsklagesBeklagte": "Beklagte",
|
||||||
"mietinkassosKlaeger": "Mietinkasso (Kläger)",
|
"mietinkassosKlaeger": "Mietinkasso (Kläger)",
|
||||||
"mietinkassosBeklagte": "Mietinkasso (Beklagte)",
|
"mietinkassosBeklagte": "Mietinkasso (Beklagte)",
|
||||||
|
"kuendigungenVermieter": "Kündigungen (Vermieter)",
|
||||||
|
"kuendigungenMieter": "Kündigungen (Mieter)",
|
||||||
"adressens": "Adressen",
|
"adressens": "Adressen",
|
||||||
"calls1": "Anrufe",
|
"calls1": "Anrufe",
|
||||||
"contactsBeteiligte": "Freigegebene Nutzer",
|
"contactsBeteiligte": "Freigegebene Nutzer",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"vmhMietverhltnisesDokumente": "Mietverhältnisse",
|
"vmhMietverhltnisesDokumente": "Mietverhältnisse",
|
||||||
"vmhErstgespraechsdokumente": "Erstgespräche",
|
"vmhErstgespraechsdokumente": "Erstgespräche",
|
||||||
"vmhRumungsklagesdokumente": "Räumungsklagen",
|
"vmhRumungsklagesdokumente": "Räumungsklagen",
|
||||||
|
"kuendigungDokumente": "Kündigungen",
|
||||||
"beteiligte2dokumente": "Beteiligte",
|
"beteiligte2dokumente": "Beteiligte",
|
||||||
"mietobjekt2dokumente": "Mietobjekte"
|
"mietobjekt2dokumente": "Mietobjekte"
|
||||||
},
|
},
|
||||||
@@ -20,6 +21,7 @@
|
|||||||
"vmhMietverhltnisesDokumente": "Mietverhältnisse",
|
"vmhMietverhltnisesDokumente": "Mietverhältnisse",
|
||||||
"vmhErstgespraechsdokumente": "Erstgespräche",
|
"vmhErstgespraechsdokumente": "Erstgespräche",
|
||||||
"vmhRumungsklagesdokumente": "Räumungsklagen",
|
"vmhRumungsklagesdokumente": "Räumungsklagen",
|
||||||
|
"kuendigungDokumente": "Kündigungen",
|
||||||
"beteiligte2dokumente": "Beteiligte",
|
"beteiligte2dokumente": "Beteiligte",
|
||||||
"mietobjekt2dokumente": "Mietobjekte",
|
"mietobjekt2dokumente": "Mietobjekte",
|
||||||
"mietinkassosdokumente": "Mietinkasso"
|
"mietinkassosdokumente": "Mietinkasso"
|
||||||
|
|||||||
94
custom/Espo/Custom/Resources/i18n/de_DE/CKuendigung.json
Normal file
94
custom/Espo/Custom/Resources/i18n/de_DE/CKuendigung.json
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"kuendigungsdatum": "Kündigungsdatum",
|
||||||
|
"kuendigungsfrist": "Kündigungsfrist / Auszugsdatum",
|
||||||
|
"kuendigungsgrund": "Kündigungsgrund",
|
||||||
|
"kuendigungsart": "Kündigungsart",
|
||||||
|
"kuendigenderPartei": "Kündigende Partei",
|
||||||
|
"status": "Status",
|
||||||
|
"zustellungsdatum": "Zustellungsdatum",
|
||||||
|
"zustellungsart": "Zustellungsart",
|
||||||
|
"rueckstandsbetrag": "Rückstandsbetrag",
|
||||||
|
"monateMietrückstand": "Monate Mietrückstand",
|
||||||
|
"schonfristGewaehrt": "Schonfrist gewährt",
|
||||||
|
"schonfristDatum": "Schonfrist Datum",
|
||||||
|
"besorgnisNichtRechtzeitigerAuszug": "Besorgnis nicht rechtzeitiger Auszug",
|
||||||
|
"anmerkungen": "Anmerkungen",
|
||||||
|
"vmhMietverhltnis": "Mietverhältnis",
|
||||||
|
"mietobjekt": "Mietobjekt",
|
||||||
|
"vermieter": "Vermieter",
|
||||||
|
"mieter": "Mieter",
|
||||||
|
"dokumenteKuendigung": "Dokumente",
|
||||||
|
"contactsKuendigung": "Freigegebene Nutzer"
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"vmhMietverhltnis": "Mietverhältnis",
|
||||||
|
"mietobjekt": "Mietobjekt",
|
||||||
|
"vermieter": "Vermieter",
|
||||||
|
"mieter": "Mieter",
|
||||||
|
"dokumenteKuendigung": "Dokumente",
|
||||||
|
"contactsKuendigung": "Freigegebene Nutzer",
|
||||||
|
"meetings": "Besprechungen",
|
||||||
|
"calls": "Anrufe",
|
||||||
|
"tasks": "Aufgaben",
|
||||||
|
"emails": "E-Mails",
|
||||||
|
"collaborators": "Mitarbeiter"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"Create CKuendigung": "Kündigung erstellen"
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"kuendigungsgrund": {
|
||||||
|
"Mietrückstand": "Mietrückstand",
|
||||||
|
"Eigenbedarf": "Eigenbedarf",
|
||||||
|
"Fehlverhalten": "Fehlverhalten",
|
||||||
|
"Verwertung": "Verwertung",
|
||||||
|
"ZVG Eigenbedarf": "ZVG Eigenbedarf",
|
||||||
|
"573a Abs. 1 (nicht mehr als 2 Whng.)": "§573a Abs. 1 (nicht mehr als 2 Wohnungen)",
|
||||||
|
"573a Abs. 2 (Einliegerwohnung)": "§573a Abs. 2 (Einliegerwohnung)",
|
||||||
|
"GewerbeOrdentlich": "Gewerbe ordentlich",
|
||||||
|
"Sonstige": "Sonstige"
|
||||||
|
},
|
||||||
|
"kuendigungsart": {
|
||||||
|
"Ordentlich": "Ordentlich",
|
||||||
|
"Außerordentlich (fristlos)": "Außerordentlich (fristlos)",
|
||||||
|
"Außerordentlich (mit sozialer Frist)": "Außerordentlich (mit sozialer Frist)"
|
||||||
|
},
|
||||||
|
"kuendigenderPartei": {
|
||||||
|
"Vermieter": "Vermieter",
|
||||||
|
"Mieter": "Mieter"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"Entwurf": "Entwurf",
|
||||||
|
"Versendet": "Versendet",
|
||||||
|
"Zugestellt": "Zugestellt",
|
||||||
|
"Anerkannt": "Anerkannt",
|
||||||
|
"Bestritten": "Bestritten",
|
||||||
|
"Vollzogen": "Vollzogen",
|
||||||
|
"Widerrufen": "Widerrufen"
|
||||||
|
},
|
||||||
|
"zustellungsart": {
|
||||||
|
"Persönlich": "Persönlich",
|
||||||
|
"Einschreiben": "Einschreiben",
|
||||||
|
"Gerichtlicher Zustellungsbevollmächtigter": "Gerichtlicher Zustellungsbevollmächtigter",
|
||||||
|
"E-Mail (sofern vereinbart)": "E-Mail (sofern vereinbart)",
|
||||||
|
"Sonstige": "Sonstige"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tooltips": {
|
||||||
|
"kuendigungsdatum": "Datum, an dem die Kündigung ausgesprochen wurde",
|
||||||
|
"kuendigungsfrist": "Datum, bis zu dem das Mietverhältnis beendet sein soll (Auszugsdatum)",
|
||||||
|
"kuendigungsgrund": "Rechtlicher Grund für die Kündigung (kann mehrere sein)",
|
||||||
|
"kuendigungsart": "Art der Kündigung: ordentlich mit Frist, außerordentlich fristlos oder mit sozialer Frist",
|
||||||
|
"kuendigenderPartei": "Welche Partei kündigt das Mietverhältnis",
|
||||||
|
"status": "Aktueller Bearbeitungsstatus der Kündigung",
|
||||||
|
"zustellungsdatum": "Datum, an dem die Kündigung dem Empfänger zugestellt wurde",
|
||||||
|
"zustellungsart": "Art der Zustellung (z.B. persönlich, Einschreiben)",
|
||||||
|
"rueckstandsbetrag": "Gesamtbetrag des Mietrückstands (bei Kündigung wegen Mietrückstand)",
|
||||||
|
"monateMietrückstand": "Anzahl der Monate, für die Mietrückstand besteht",
|
||||||
|
"schonfristGewaehrt": "Wurde eine Schonfrist nach § 569 Abs. 3 Nr. 2 BGB gewährt?",
|
||||||
|
"schonfristDatum": "Bis zu welchem Datum läuft die Schonfrist?",
|
||||||
|
"besorgnisNichtRechtzeitigerAuszug": "Besteht die Besorgnis, dass der Mieter nicht rechtzeitig auszieht? (Relevant für § 940a ZPO)",
|
||||||
|
"anmerkungen": "Zusätzliche Hinweise und Anmerkungen zur Kündigung"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,8 @@
|
|||||||
"vmhMietverhltnises2Mietobjekt": "Mietverhältnisse (veraltet)",
|
"vmhMietverhltnises2Mietobjekt": "Mietverhältnisse (veraltet)",
|
||||||
"vmhMietverhltnises": "Mietverhältnisse",
|
"vmhMietverhltnises": "Mietverhältnisse",
|
||||||
"contactsMietobjekt": "Freigegebene Nutzer",
|
"contactsMietobjekt": "Freigegebene Nutzer",
|
||||||
"dokumentesMietobjekt": "Dokumente"
|
"dokumentesMietobjekt": "Dokumente",
|
||||||
|
"kuendigungen": "Kündigungen"
|
||||||
},
|
},
|
||||||
"links": {
|
"links": {
|
||||||
"vmhMietverhltnises2Mietobjekt": "Mietverhältnisse (veraltet)",
|
"vmhMietverhltnises2Mietobjekt": "Mietverhältnisse (veraltet)",
|
||||||
@@ -14,6 +15,7 @@
|
|||||||
"contact2mietobjekt": "Kontakte",
|
"contact2mietobjekt": "Kontakte",
|
||||||
"vmhRumungsklages": "Räumungsklagen",
|
"vmhRumungsklages": "Räumungsklagen",
|
||||||
"mietinkassos": "Mietinkasso",
|
"mietinkassos": "Mietinkasso",
|
||||||
|
"kuendigungen": "Kündigungen",
|
||||||
"contactsMietobjekt": "Freigegebene Nutzer",
|
"contactsMietobjekt": "Freigegebene Nutzer",
|
||||||
"dokumentesMietobjekt": "Dokumente"
|
"dokumentesMietobjekt": "Dokumente"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
"warmmiete": "Warmmiete",
|
"warmmiete": "Warmmiete",
|
||||||
"vmhRumungsklages": "Räumungsklagen",
|
"vmhRumungsklages": "Räumungsklagen",
|
||||||
"mietinkassos": "Mietinkasso",
|
"mietinkassos": "Mietinkasso",
|
||||||
|
"kuendigungen": "Kündigungen",
|
||||||
"vmhbeteiligtevermieter": "Vermieter",
|
"vmhbeteiligtevermieter": "Vermieter",
|
||||||
"vmhbeteiligtemieter": "Mieter",
|
"vmhbeteiligtemieter": "Mieter",
|
||||||
"contactsMietverhltnis": "Freigegebene Nutzer",
|
"contactsMietverhltnis": "Freigegebene Nutzer",
|
||||||
@@ -33,6 +34,7 @@
|
|||||||
"tasks": "Aufgaben",
|
"tasks": "Aufgaben",
|
||||||
"vmhRumungsklages": "Räumungsklagen",
|
"vmhRumungsklages": "Räumungsklagen",
|
||||||
"mietinkassos": "Mietinkasso",
|
"mietinkassos": "Mietinkasso",
|
||||||
|
"kuendigungen": "Kündigungen",
|
||||||
"vmhbeteiligtevermieter": "Vermieter",
|
"vmhbeteiligtevermieter": "Vermieter",
|
||||||
"vmhbeteiligtemieter": "Mieter",
|
"vmhbeteiligtemieter": "Mieter",
|
||||||
"contactsMietverhltnis": "Freigegebene Nutzer",
|
"contactsMietverhltnis": "Freigegebene Nutzer",
|
||||||
@@ -44,7 +46,8 @@
|
|||||||
"labels": {
|
"labels": {
|
||||||
"Create CVmhMietverhltnis": "Mietverhältnis erstellen",
|
"Create CVmhMietverhltnis": "Mietverhältnis erstellen",
|
||||||
"Initiate Eviction": "Räumungsklage einleiten",
|
"Initiate Eviction": "Räumungsklage einleiten",
|
||||||
"Initiate Rent Collection": "Mietinkasso einleiten"
|
"Initiate Rent Collection": "Mietinkasso einleiten",
|
||||||
|
"Initiate Termination": "Kündigung erstellen"
|
||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"confirmEviction": "Möchten Sie wirklich eine Räumungsklage aus diesem Mietverhältnis einleiten?",
|
"confirmEviction": "Möchten Sie wirklich eine Räumungsklage aus diesem Mietverhältnis einleiten?",
|
||||||
@@ -52,6 +55,9 @@
|
|||||||
"evictionError": "Fehler beim Erstellen der Räumungsklage",
|
"evictionError": "Fehler beim Erstellen der Räumungsklage",
|
||||||
"confirmRentCollection": "Möchten Sie wirklich ein Mietinkasso aus diesem Mietverhältnis einleiten?",
|
"confirmRentCollection": "Möchten Sie wirklich ein Mietinkasso aus diesem Mietverhältnis einleiten?",
|
||||||
"rentCollectionCreated": "Mietinkasso wurde erfolgreich erstellt",
|
"rentCollectionCreated": "Mietinkasso wurde erfolgreich erstellt",
|
||||||
"rentCollectionError": "Fehler beim Erstellen des Mietinkassos"
|
"rentCollectionError": "Fehler beim Erstellen des Mietinkassos",
|
||||||
|
"confirmTermination": "Möchten Sie wirklich eine Kündigung für dieses Mietverhältnis erstellen?",
|
||||||
|
"terminationCreated": "Kündigung wurde erfolgreich erstellt",
|
||||||
|
"terminationError": "Fehler beim Erstellen der Kündigung"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,8 @@
|
|||||||
"cMietobjekteContactPortal": "Mietobjekte (Portal)",
|
"cMietobjekteContactPortal": "Mietobjekte (Portal)",
|
||||||
"cAdressenContact": "Adressen",
|
"cAdressenContact": "Adressen",
|
||||||
"cVmhRumungsklageContact": "Räumungsklagen (Portal)",
|
"cVmhRumungsklageContact": "Räumungsklagen (Portal)",
|
||||||
|
"cMietinkassoContact": "Mietinkasso (Portal)",
|
||||||
|
"cKuendigungContact": "Kündigungen (Portal)",
|
||||||
"cBankverbindungenContact": "Bankverbindungen"
|
"cBankverbindungenContact": "Bankverbindungen"
|
||||||
},
|
},
|
||||||
"links": {
|
"links": {
|
||||||
@@ -29,6 +31,7 @@
|
|||||||
"cAdressenContact": "Adressen",
|
"cAdressenContact": "Adressen",
|
||||||
"cVmhRumungsklageContact": "Räumungsklagen (Portal)",
|
"cVmhRumungsklageContact": "Räumungsklagen (Portal)",
|
||||||
"cMietinkassoContact": "Mietinkasso",
|
"cMietinkassoContact": "Mietinkasso",
|
||||||
|
"cKuendigungContact": "Kündigungen (Portal)",
|
||||||
"cBankverbindungenContact": "Bankverbindungen"
|
"cBankverbindungenContact": "Bankverbindungen"
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
"vmhRumungsklagesKlaeger": "Plaintiff",
|
"vmhRumungsklagesKlaeger": "Plaintiff",
|
||||||
"mietinkassosKlaeger": "Rent Collection (Plaintiff)",
|
"mietinkassosKlaeger": "Rent Collection (Plaintiff)",
|
||||||
"mietinkassosBeklagte": "Rent Collection (Defendant)",
|
"mietinkassosBeklagte": "Rent Collection (Defendant)",
|
||||||
|
"kuendigungenVermieter": "Terminations (Landlord)",
|
||||||
|
"kuendigungenMieter": "Terminations (Tenant)",
|
||||||
"contactsBeteiligte": "Portal Users",
|
"contactsBeteiligte": "Portal Users",
|
||||||
"dokumentesBeteiligte": "Documents"
|
"dokumentesBeteiligte": "Documents"
|
||||||
},
|
},
|
||||||
@@ -27,6 +29,8 @@
|
|||||||
"vmhRumungsklagesKlaeger": "Plaintiff",
|
"vmhRumungsklagesKlaeger": "Plaintiff",
|
||||||
"mietinkassosKlaeger": "Rent Collection (Plaintiff)",
|
"mietinkassosKlaeger": "Rent Collection (Plaintiff)",
|
||||||
"mietinkassosBeklagte": "Rent Collection (Defendant)",
|
"mietinkassosBeklagte": "Rent Collection (Defendant)",
|
||||||
|
"kuendigungenVermieter": "Terminations (Landlord)",
|
||||||
|
"kuendigungenMieter": "Terminations (Tenant)",
|
||||||
"contactsBeteiligte": "Portal Users",
|
"contactsBeteiligte": "Portal Users",
|
||||||
"dokumentesBeteiligte": "Documents",
|
"dokumentesBeteiligte": "Documents",
|
||||||
"bankverbindungens": "Bank Accounts"
|
"bankverbindungens": "Bank Accounts"
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
"vmhMietverhltnisesDokumente": "Tenancies",
|
"vmhMietverhltnisesDokumente": "Tenancies",
|
||||||
"vmhErstgespraechsdokumente": "Initial Consultations",
|
"vmhErstgespraechsdokumente": "Initial Consultations",
|
||||||
"vmhRumungsklagesdokumente": "Eviction Lawsuits",
|
"vmhRumungsklagesdokumente": "Eviction Lawsuits",
|
||||||
|
"kuendigungDokumente": "Terminations",
|
||||||
"md5sum": "MD5 Checksum",
|
"md5sum": "MD5 Checksum",
|
||||||
"sha256": "SHA256 Checksum",
|
"sha256": "SHA256 Checksum",
|
||||||
"beteiligte2dokumente": "Parties",
|
"beteiligte2dokumente": "Parties",
|
||||||
@@ -17,6 +18,7 @@
|
|||||||
"vmhMietverhltnisesDokumente": "Tenancies",
|
"vmhMietverhltnisesDokumente": "Tenancies",
|
||||||
"vmhErstgespraechsdokumente": "Initial Consultations",
|
"vmhErstgespraechsdokumente": "Initial Consultations",
|
||||||
"vmhRumungsklagesdokumente": "Eviction Lawsuits",
|
"vmhRumungsklagesdokumente": "Eviction Lawsuits",
|
||||||
|
"kuendigungDokumente": "Terminations",
|
||||||
"beteiligte2dokumente": "Parties",
|
"beteiligte2dokumente": "Parties",
|
||||||
"mietobjekt2dokumente": "Properties",
|
"mietobjekt2dokumente": "Properties",
|
||||||
"mietinkassosdokumente": "Rent Collection"
|
"mietinkassosdokumente": "Rent Collection"
|
||||||
|
|||||||
94
custom/Espo/Custom/Resources/i18n/en_US/CKuendigung.json
Normal file
94
custom/Espo/Custom/Resources/i18n/en_US/CKuendigung.json
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"kuendigungsdatum": "Termination Date",
|
||||||
|
"kuendigungsfrist": "Notice Period / Move-out Date",
|
||||||
|
"kuendigungsgrund": "Termination Reason",
|
||||||
|
"kuendigungsart": "Termination Type",
|
||||||
|
"kuendigenderPartei": "Terminating Party",
|
||||||
|
"status": "Status",
|
||||||
|
"zustellungsdatum": "Delivery Date",
|
||||||
|
"zustellungsart": "Delivery Method",
|
||||||
|
"rueckstandsbetrag": "Arrears Amount",
|
||||||
|
"monateMietrückstand": "Months of Arrears",
|
||||||
|
"schonfristGewaehrt": "Grace Period Granted",
|
||||||
|
"schonfristDatum": "Grace Period Date",
|
||||||
|
"besorgnisNichtRechtzeitigerAuszug": "Concern of Delayed Move-out",
|
||||||
|
"anmerkungen": "Notes",
|
||||||
|
"vmhMietverhltnis": "Rental Agreement",
|
||||||
|
"mietobjekt": "Property",
|
||||||
|
"vermieter": "Landlords",
|
||||||
|
"mieter": "Tenants",
|
||||||
|
"dokumenteKuendigung": "Documents",
|
||||||
|
"contactsKuendigung": "Shared Users"
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"vmhMietverhltnis": "Rental Agreement",
|
||||||
|
"mietobjekt": "Property",
|
||||||
|
"vermieter": "Landlords",
|
||||||
|
"mieter": "Tenants",
|
||||||
|
"dokumenteKuendigung": "Documents",
|
||||||
|
"contactsKuendigung": "Shared Users",
|
||||||
|
"meetings": "Meetings",
|
||||||
|
"calls": "Calls",
|
||||||
|
"tasks": "Tasks",
|
||||||
|
"emails": "Emails",
|
||||||
|
"collaborators": "Collaborators"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"Create CKuendigung": "Create Termination"
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"kuendigungsgrund": {
|
||||||
|
"Mietrückstand": "Rent Arrears",
|
||||||
|
"Eigenbedarf": "Personal Use",
|
||||||
|
"Fehlverhalten": "Misconduct",
|
||||||
|
"Verwertung": "Utilization",
|
||||||
|
"ZVG Eigenbedarf": "Foreclosure Personal Use",
|
||||||
|
"573a Abs. 1 (nicht mehr als 2 Whng.)": "§573a Para. 1 (max 2 units)",
|
||||||
|
"573a Abs. 2 (Einliegerwohnung)": "§573a Para. 2 (granny flat)",
|
||||||
|
"GewerbeOrdentlich": "Commercial Regular",
|
||||||
|
"Sonstige": "Other"
|
||||||
|
},
|
||||||
|
"kuendigungsart": {
|
||||||
|
"Ordentlich": "Regular",
|
||||||
|
"Außerordentlich (fristlos)": "Extraordinary (without notice)",
|
||||||
|
"Außerordentlich (mit sozialer Frist)": "Extraordinary (with social grace period)"
|
||||||
|
},
|
||||||
|
"kuendigenderPartei": {
|
||||||
|
"Vermieter": "Landlord",
|
||||||
|
"Mieter": "Tenant"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"Entwurf": "Draft",
|
||||||
|
"Versendet": "Sent",
|
||||||
|
"Zugestellt": "Delivered",
|
||||||
|
"Anerkannt": "Acknowledged",
|
||||||
|
"Bestritten": "Disputed",
|
||||||
|
"Vollzogen": "Completed",
|
||||||
|
"Widerrufen": "Revoked"
|
||||||
|
},
|
||||||
|
"zustellungsart": {
|
||||||
|
"Persönlich": "Personal",
|
||||||
|
"Einschreiben": "Registered Mail",
|
||||||
|
"Gerichtlicher Zustellungsbevollmächtigter": "Court Process Server",
|
||||||
|
"E-Mail (sofern vereinbart)": "E-Mail (if agreed)",
|
||||||
|
"Sonstige": "Other"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tooltips": {
|
||||||
|
"kuendigungsdatum": "Date when the termination was issued",
|
||||||
|
"kuendigungsfrist": "Date by which the tenancy should end (move-out date)",
|
||||||
|
"kuendigungsgrund": "Legal reason(s) for termination",
|
||||||
|
"kuendigungsart": "Type of termination: regular with notice period, extraordinary without notice, or with social grace period",
|
||||||
|
"kuendigenderPartei": "Which party terminates the tenancy",
|
||||||
|
"status": "Current processing status of the termination",
|
||||||
|
"zustellungsdatum": "Date when the termination was delivered to the recipient",
|
||||||
|
"zustellungsart": "Method of delivery (e.g., personal, registered mail)",
|
||||||
|
"rueckstandsbetrag": "Total amount of rent arrears (for termination due to rent arrears)",
|
||||||
|
"monateMietrückstand": "Number of months for which rent is in arrears",
|
||||||
|
"schonfristGewaehrt": "Was a grace period granted according to § 569 Para. 3 No. 2 BGB?",
|
||||||
|
"schonfristDatum": "Until what date does the grace period run?",
|
||||||
|
"besorgnisNichtRechtzeitigerAuszug": "Is there concern that the tenant will not move out on time? (Relevant for § 940a ZPO)",
|
||||||
|
"anmerkungen": "Additional notes and comments about the termination"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,6 +20,7 @@
|
|||||||
"contact2mietobjekt": "Contacts",
|
"contact2mietobjekt": "Contacts",
|
||||||
"vmhRumungsklages": "Eviction Lawsuits",
|
"vmhRumungsklages": "Eviction Lawsuits",
|
||||||
"mietinkassos": "Rent Collection",
|
"mietinkassos": "Rent Collection",
|
||||||
|
"kuendigungen": "Terminations",
|
||||||
"contactsMietobjekt": "Portal Users",
|
"contactsMietobjekt": "Portal Users",
|
||||||
"dokumentesMietobjekt": "Documents"
|
"dokumentesMietobjekt": "Documents"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
"tasks": "Tasks",
|
"tasks": "Tasks",
|
||||||
"vmhRumungsklages": "Eviction Lawsuits",
|
"vmhRumungsklages": "Eviction Lawsuits",
|
||||||
"mietinkassos": "Rent Collection",
|
"mietinkassos": "Rent Collection",
|
||||||
|
"kuendigungen": "Terminations",
|
||||||
"vmhbeteiligtevermieter": "Landlords",
|
"vmhbeteiligtevermieter": "Landlords",
|
||||||
"vmhbeteiligtemieter": "Tenants",
|
"vmhbeteiligtemieter": "Tenants",
|
||||||
"contactsMietverhltnis": "Portal Users",
|
"contactsMietverhltnis": "Portal Users",
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
"cAdressenContact": "Addresses",
|
"cAdressenContact": "Addresses",
|
||||||
"cVmhRumungsklageContact": "Eviction Lawsuits (Portal)",
|
"cVmhRumungsklageContact": "Eviction Lawsuits (Portal)",
|
||||||
"cMietinkassoContact": "Rent Collection",
|
"cMietinkassoContact": "Rent Collection",
|
||||||
|
"cKuendigungContact": "Terminations (Portal)",
|
||||||
"cBankverbindungenContact": "Bank Accounts"
|
"cBankverbindungenContact": "Bank Accounts"
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"controller": "controllers/record",
|
||||||
|
"boolFilterList": [
|
||||||
|
"onlyMy"
|
||||||
|
],
|
||||||
|
"iconClass": "fas fa-file-contract",
|
||||||
|
"sidePanels": {
|
||||||
|
"detail": [
|
||||||
|
{
|
||||||
|
"name": "activities",
|
||||||
|
"reference": "activities"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "history",
|
||||||
|
"reference": "history"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tasks",
|
||||||
|
"reference": "tasks"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"bottomPanels": {
|
||||||
|
"detail": [
|
||||||
|
{
|
||||||
|
"name": "activities",
|
||||||
|
"reference": "activities",
|
||||||
|
"disabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "history",
|
||||||
|
"reference": "history",
|
||||||
|
"disabled": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"relationshipPanels": {
|
||||||
|
"vermieter": {
|
||||||
|
"layout": null,
|
||||||
|
"selectPrimaryFilterName": null
|
||||||
|
},
|
||||||
|
"mieter": {
|
||||||
|
"layout": null,
|
||||||
|
"selectPrimaryFilterName": null
|
||||||
|
},
|
||||||
|
"dokumenteKuendigung": {
|
||||||
|
"layout": null,
|
||||||
|
"selectPrimaryFilterName": null
|
||||||
|
},
|
||||||
|
"contactsKuendigung": {
|
||||||
|
"layout": null,
|
||||||
|
"selectPrimaryFilterName": "portalUsers"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,6 +25,16 @@
|
|||||||
"iconHtml": "<span class=\"fas fa-euro-sign\"></span>",
|
"iconHtml": "<span class=\"fas fa-euro-sign\"></span>",
|
||||||
"style": "warning",
|
"style": "warning",
|
||||||
"acl": "edit"
|
"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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,6 +294,22 @@
|
|||||||
"audited": false,
|
"audited": false,
|
||||||
"isCustom": true
|
"isCustom": true
|
||||||
},
|
},
|
||||||
|
"kuendigungenVermieter": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"relationName": "cBeteiligteKuendigungVermieter",
|
||||||
|
"foreign": "vermieter",
|
||||||
|
"entity": "CKuendigung",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"kuendigungenMieter": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"relationName": "cBeteiligteKuendigungMieter",
|
||||||
|
"foreign": "mieter",
|
||||||
|
"entity": "CKuendigung",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
"dokumentesBeteiligte": {
|
"dokumentesBeteiligte": {
|
||||||
"type": "hasMany",
|
"type": "hasMany",
|
||||||
"relationName": "cBeteiligteDokumente",
|
"relationName": "cBeteiligteDokumente",
|
||||||
|
|||||||
@@ -176,6 +176,14 @@
|
|||||||
"audited": false,
|
"audited": false,
|
||||||
"isCustom": true
|
"isCustom": true
|
||||||
},
|
},
|
||||||
|
"kuendigungDokumente": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"relationName": "cDokumenteKuendigung",
|
||||||
|
"foreign": "dokumenteKuendigung",
|
||||||
|
"entity": "CKuendigung",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
"beteiligte2dokumente": {
|
"beteiligte2dokumente": {
|
||||||
"type": "hasMany",
|
"type": "hasMany",
|
||||||
"relationName": "cBeteiligteDokumente",
|
"relationName": "cBeteiligteDokumente",
|
||||||
|
|||||||
@@ -0,0 +1,338 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"name": {
|
||||||
|
"type": "varchar",
|
||||||
|
"required": true,
|
||||||
|
"pattern": "$noBadCharacters"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
"createdAt": {
|
||||||
|
"type": "datetime",
|
||||||
|
"readOnly": true
|
||||||
|
},
|
||||||
|
"modifiedAt": {
|
||||||
|
"type": "datetime",
|
||||||
|
"readOnly": true
|
||||||
|
},
|
||||||
|
"createdBy": {
|
||||||
|
"type": "link",
|
||||||
|
"readOnly": true,
|
||||||
|
"view": "views/fields/user"
|
||||||
|
},
|
||||||
|
"modifiedBy": {
|
||||||
|
"type": "link",
|
||||||
|
"readOnly": true,
|
||||||
|
"view": "views/fields/user"
|
||||||
|
},
|
||||||
|
"assignedUser": {
|
||||||
|
"type": "link",
|
||||||
|
"required": false,
|
||||||
|
"view": "views/fields/assigned-user"
|
||||||
|
},
|
||||||
|
"teams": {
|
||||||
|
"type": "linkMultiple",
|
||||||
|
"view": "views/fields/teams"
|
||||||
|
},
|
||||||
|
"collaborators": {
|
||||||
|
"type": "linkMultiple",
|
||||||
|
"view": "views/fields/collaborators",
|
||||||
|
"maxCount": 30,
|
||||||
|
"fieldManagerParamList": [
|
||||||
|
"readOnly",
|
||||||
|
"readOnlyAfterCreate",
|
||||||
|
"audited",
|
||||||
|
"autocompleteOnEmpty",
|
||||||
|
"maxCount",
|
||||||
|
"inlineEditDisabled",
|
||||||
|
"tooltipText"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"kuendigungsdatum": {
|
||||||
|
"type": "date",
|
||||||
|
"required": true,
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"kuendigungsfrist": {
|
||||||
|
"type": "date",
|
||||||
|
"required": true,
|
||||||
|
"after": "kuendigungsdatum",
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"kuendigungsgrund": {
|
||||||
|
"type": "multiEnum",
|
||||||
|
"required": true,
|
||||||
|
"options": [
|
||||||
|
"Mietrückstand",
|
||||||
|
"Eigenbedarf",
|
||||||
|
"Fehlverhalten",
|
||||||
|
"Verwertung",
|
||||||
|
"ZVG Eigenbedarf",
|
||||||
|
"573a Abs. 1 (nicht mehr als 2 Whng.)",
|
||||||
|
"573a Abs. 2 (Einliegerwohnung)",
|
||||||
|
"GewerbeOrdentlich",
|
||||||
|
"Sonstige"
|
||||||
|
],
|
||||||
|
"default": ["Mietrückstand"],
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"kuendigungsart": {
|
||||||
|
"type": "enum",
|
||||||
|
"required": true,
|
||||||
|
"options": [
|
||||||
|
"Ordentlich",
|
||||||
|
"Außerordentlich (fristlos)",
|
||||||
|
"Außerordentlich (mit sozialer Frist)"
|
||||||
|
],
|
||||||
|
"style": {
|
||||||
|
"Ordentlich": "success",
|
||||||
|
"Außerordentlich (fristlos)": "danger",
|
||||||
|
"Außerordentlich (mit sozialer Frist)": "warning"
|
||||||
|
},
|
||||||
|
"default": "Ordentlich",
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"kuendigenderPartei": {
|
||||||
|
"type": "enum",
|
||||||
|
"required": true,
|
||||||
|
"options": [
|
||||||
|
"Vermieter",
|
||||||
|
"Mieter"
|
||||||
|
],
|
||||||
|
"style": {
|
||||||
|
"Vermieter": "primary",
|
||||||
|
"Mieter": "info"
|
||||||
|
},
|
||||||
|
"default": "Vermieter",
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "enum",
|
||||||
|
"required": true,
|
||||||
|
"options": [
|
||||||
|
"Entwurf",
|
||||||
|
"Versendet",
|
||||||
|
"Zugestellt",
|
||||||
|
"Anerkannt",
|
||||||
|
"Bestritten",
|
||||||
|
"Vollzogen",
|
||||||
|
"Widerrufen"
|
||||||
|
],
|
||||||
|
"style": {
|
||||||
|
"Entwurf": null,
|
||||||
|
"Versendet": "warning",
|
||||||
|
"Zugestellt": "info",
|
||||||
|
"Anerkannt": "success",
|
||||||
|
"Bestritten": "danger",
|
||||||
|
"Vollzogen": "success",
|
||||||
|
"Widerrufen": null
|
||||||
|
},
|
||||||
|
"default": "Entwurf",
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"zustellungsdatum": {
|
||||||
|
"type": "date",
|
||||||
|
"required": false,
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"zustellungsart": {
|
||||||
|
"type": "enum",
|
||||||
|
"required": false,
|
||||||
|
"options": [
|
||||||
|
"Persönlich",
|
||||||
|
"Einschreiben",
|
||||||
|
"Gerichtlicher Zustellungsbevollmächtigter",
|
||||||
|
"E-Mail (sofern vereinbart)",
|
||||||
|
"Sonstige"
|
||||||
|
],
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"rueckstandsbetrag": {
|
||||||
|
"type": "currency",
|
||||||
|
"required": false,
|
||||||
|
"onlyDefaultCurrency": true,
|
||||||
|
"conversionDisabled": true,
|
||||||
|
"min": 0,
|
||||||
|
"decimal": true,
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"monateMietrückstand": {
|
||||||
|
"type": "int",
|
||||||
|
"required": false,
|
||||||
|
"min": 0,
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"schonfristGewaehrt": {
|
||||||
|
"type": "bool",
|
||||||
|
"default": false,
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"schonfristDatum": {
|
||||||
|
"type": "date",
|
||||||
|
"required": false,
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"besorgnisNichtRechtzeitigerAuszug": {
|
||||||
|
"type": "bool",
|
||||||
|
"default": false,
|
||||||
|
"tooltip": true,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"anmerkungen": {
|
||||||
|
"type": "text",
|
||||||
|
"required": false,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"vmhMietverhltnis": {
|
||||||
|
"type": "link",
|
||||||
|
"required": false,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"mietobjekt": {
|
||||||
|
"type": "link",
|
||||||
|
"required": false,
|
||||||
|
"isCustom": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"createdBy": {
|
||||||
|
"type": "belongsTo",
|
||||||
|
"entity": "User"
|
||||||
|
},
|
||||||
|
"modifiedBy": {
|
||||||
|
"type": "belongsTo",
|
||||||
|
"entity": "User"
|
||||||
|
},
|
||||||
|
"assignedUser": {
|
||||||
|
"type": "belongsTo",
|
||||||
|
"entity": "User"
|
||||||
|
},
|
||||||
|
"teams": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"entity": "Team",
|
||||||
|
"relationName": "entityTeam",
|
||||||
|
"layoutRelationshipsDisabled": true
|
||||||
|
},
|
||||||
|
"collaborators": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"entity": "User",
|
||||||
|
"relationName": "entityCollaborator",
|
||||||
|
"layoutRelationshipsDisabled": true
|
||||||
|
},
|
||||||
|
"meetings": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"entity": "Meeting",
|
||||||
|
"foreign": "parent"
|
||||||
|
},
|
||||||
|
"calls": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"entity": "Call",
|
||||||
|
"foreign": "parent"
|
||||||
|
},
|
||||||
|
"tasks": {
|
||||||
|
"type": "hasChildren",
|
||||||
|
"entity": "Task",
|
||||||
|
"foreign": "parent"
|
||||||
|
},
|
||||||
|
"emails": {
|
||||||
|
"type": "hasChildren",
|
||||||
|
"entity": "Email",
|
||||||
|
"foreign": "parent",
|
||||||
|
"layoutRelationshipsDisabled": true
|
||||||
|
},
|
||||||
|
"vmhMietverhltnis": {
|
||||||
|
"type": "belongsTo",
|
||||||
|
"foreign": "kuendigungen",
|
||||||
|
"entity": "CVmhMietverhltnis",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"mietobjekt": {
|
||||||
|
"type": "belongsTo",
|
||||||
|
"foreign": "kuendigungen",
|
||||||
|
"entity": "CMietobjekt",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"vermieter": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"relationName": "cBeteiligteKuendigungVermieter",
|
||||||
|
"foreign": "kuendigungenVermieter",
|
||||||
|
"entity": "CBeteiligte",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"mieter": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"relationName": "cBeteiligteKuendigungMieter",
|
||||||
|
"foreign": "kuendigungenMieter",
|
||||||
|
"entity": "CBeteiligte",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"dokumenteKuendigung": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"relationName": "cDokumenteKuendigung",
|
||||||
|
"foreign": "kuendigungDokumente",
|
||||||
|
"entity": "CDokumente",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"contactsKuendigung": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"relationName": "cKuendigungContact",
|
||||||
|
"foreign": "cKuendigungContact",
|
||||||
|
"entity": "Contact",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"collection": {
|
||||||
|
"orderBy": "createdAt",
|
||||||
|
"order": "desc",
|
||||||
|
"textFilterFields": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"fullTextSearch": false,
|
||||||
|
"countDisabled": false
|
||||||
|
},
|
||||||
|
"indexes": {
|
||||||
|
"name": {
|
||||||
|
"columns": [
|
||||||
|
"name",
|
||||||
|
"deleted"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"assignedUser": {
|
||||||
|
"columns": [
|
||||||
|
"assignedUserId",
|
||||||
|
"deleted"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"createdAt": {
|
||||||
|
"columns": [
|
||||||
|
"createdAt",
|
||||||
|
"deleted"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"kuendigungsdatum": {
|
||||||
|
"columns": [
|
||||||
|
"kuendigungsdatum",
|
||||||
|
"deleted"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -157,6 +157,14 @@
|
|||||||
"entity": "CMietinkasso",
|
"entity": "CMietinkasso",
|
||||||
"audited": false,
|
"audited": false,
|
||||||
"isCustom": true
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"kuendigungen": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"relationName": "cKuendigungMietobjekt",
|
||||||
|
"foreign": "mietobjekt",
|
||||||
|
"entity": "CKuendigung",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
|
|||||||
@@ -280,6 +280,14 @@
|
|||||||
"entity": "CMietobjekt",
|
"entity": "CMietobjekt",
|
||||||
"audited": false,
|
"audited": false,
|
||||||
"isCustom": true
|
"isCustom": true
|
||||||
|
},
|
||||||
|
"kuendigungen": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"relationName": "cKuendigungVmhMietverhltnis",
|
||||||
|
"foreign": "vmhMietverhltnis",
|
||||||
|
"entity": "CKuendigung",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"collection": {
|
"collection": {
|
||||||
|
|||||||
@@ -94,6 +94,14 @@
|
|||||||
"audited": false,
|
"audited": false,
|
||||||
"isCustom": true
|
"isCustom": true
|
||||||
},
|
},
|
||||||
|
"cKuendigungContact": {
|
||||||
|
"type": "hasMany",
|
||||||
|
"relationName": "cKuendigungContact",
|
||||||
|
"foreign": "contactsKuendigung",
|
||||||
|
"entity": "CKuendigung",
|
||||||
|
"audited": false,
|
||||||
|
"isCustom": true
|
||||||
|
},
|
||||||
"cBankverbindungenContact": {
|
"cBankverbindungenContact": {
|
||||||
"type": "hasMany",
|
"type": "hasMany",
|
||||||
"relationName": "cBankverbindungContact",
|
"relationName": "cBankverbindungContact",
|
||||||
|
|||||||
@@ -0,0 +1,109 @@
|
|||||||
|
[
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "name"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "status"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "kuendigungsart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kuendigenderPartei"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "kuendigungsdatum"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kuendigungsfrist"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "vmhMietverhltnis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mietobjekt"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "kuendigungsgrund",
|
||||||
|
"fullWidth": true
|
||||||
|
},
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "zustellungsdatum"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zustellungsart"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "rueckstandsbetrag"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "monateMietrückstand"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "schonfristGewaehrt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "schonfristDatum"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "besorgnisNichtRechtzeitigerAuszug"
|
||||||
|
},
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "description",
|
||||||
|
"fullWidth": true
|
||||||
|
},
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "anmerkungen",
|
||||||
|
"fullWidth": true
|
||||||
|
},
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "assignedUser"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "teams"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "createdAt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "modifiedAt"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "createdBy"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "modifiedBy"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
[
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "name"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "status"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "kuendigungsart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kuendigenderPartei"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "kuendigungsdatum"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kuendigungsfrist"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "vmhMietverhltnis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mietobjekt"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "assignedUser"
|
||||||
|
},
|
||||||
|
false
|
||||||
|
]
|
||||||
|
]
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "name",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "status"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kuendigungsart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kuendigungsdatum"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kuendigungsfrist"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kuendigenderPartei"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "vmhMietverhltnis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mietobjekt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "assignedUser"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"entity": true,
|
||||||
|
"layouts": true,
|
||||||
|
"tab": true,
|
||||||
|
"acl": true,
|
||||||
|
"customizable": true,
|
||||||
|
"type": "BasePlus",
|
||||||
|
"module": "Custom",
|
||||||
|
"object": true,
|
||||||
|
"isCustom": true
|
||||||
|
}
|
||||||
@@ -368,4 +368,140 @@ class CVmhMietverhltnis extends \Espo\Services\Record
|
|||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiate termination (Kündigung) from Mietverhältnis
|
||||||
|
*
|
||||||
|
* @param string $mietverhaeltnisId
|
||||||
|
* @return array
|
||||||
|
* @throws NotFound
|
||||||
|
* @throws Forbidden
|
||||||
|
*/
|
||||||
|
public function initiateTermination(string $mietverhaeltnisId): array
|
||||||
|
{
|
||||||
|
// 1. Load Mietverhältnis
|
||||||
|
$mietverhaeltnis = $this->entityManager->getEntity('CVmhMietverhltnis', $mietverhaeltnisId);
|
||||||
|
if (!$mietverhaeltnis) {
|
||||||
|
throw new NotFound('Mietverhältnis not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. ACL Checks
|
||||||
|
if (!$this->acl->check($mietverhaeltnis, 'read')) {
|
||||||
|
throw new Forbidden('No read access to Mietverhältnis');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->acl->checkScope('CKuendigung', 'create')) {
|
||||||
|
throw new Forbidden('No create access to Kündigung');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Start Transaction
|
||||||
|
$this->entityManager->getTransactionManager()->start();
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 4. Prepare data for new Kündigung
|
||||||
|
$data = new \stdClass();
|
||||||
|
$data->name = 'Kündigung - ' . $mietverhaeltnis->get('name');
|
||||||
|
|
||||||
|
// Copy assignedUser and teams
|
||||||
|
if ($mietverhaeltnis->get('assignedUserId')) {
|
||||||
|
$data->assignedUserId = $mietverhaeltnis->get('assignedUserId');
|
||||||
|
}
|
||||||
|
|
||||||
|
$teamsIds = $mietverhaeltnis->getLinkMultipleIdList('teams');
|
||||||
|
if (!empty($teamsIds)) {
|
||||||
|
$data->teamsIds = $teamsIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pre-fill dates from Mietverhältnis
|
||||||
|
if ($mietverhaeltnis->get('auszugsfrist')) {
|
||||||
|
$data->kuendigungsfrist = $mietverhaeltnis->get('auszugsfrist');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pre-fill Kündigungsgrund from Mietverhältnis
|
||||||
|
if ($mietverhaeltnis->get('kndigungsgrundWohnraum')) {
|
||||||
|
$data->kuendigungsgrund = $mietverhaeltnis->get('kndigungsgrundWohnraum');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pre-fill Besorgnis nicht rechtzeitiger Auszug
|
||||||
|
if ($mietverhaeltnis->get('besorgnisNichtRechtzeitigerAuszug')) {
|
||||||
|
$data->besorgnisNichtRechtzeitigerAuszug = $mietverhaeltnis->get('besorgnisNichtRechtzeitigerAuszug');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. Create Kündigung entity
|
||||||
|
$kuendigung = $this->entityManager->createEntity('CKuendigung', (array)$data);
|
||||||
|
|
||||||
|
if (!$kuendigung) {
|
||||||
|
throw new \RuntimeException('Failed to create Kündigung');
|
||||||
|
}
|
||||||
|
|
||||||
|
$kuendigungRepo = $this->entityManager->getRepository('CKuendigung');
|
||||||
|
|
||||||
|
// 6. Link Mietverhältnis to Kündigung
|
||||||
|
$kuendigungRepo
|
||||||
|
->getRelation($kuendigung, 'vmhMietverhltnis')
|
||||||
|
->relate($mietverhaeltnis);
|
||||||
|
|
||||||
|
// 7. Get and link Mietobjekt
|
||||||
|
$mietobjekt = $this->entityManager
|
||||||
|
->getRepository('CVmhMietverhltnis')
|
||||||
|
->getRelation($mietverhaeltnis, 'vmhMietobjekt')
|
||||||
|
->findOne();
|
||||||
|
|
||||||
|
if ($mietobjekt) {
|
||||||
|
$kuendigungRepo
|
||||||
|
->getRelation($kuendigung, 'mietobjekt')
|
||||||
|
->relate($mietobjekt);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 8. Get Vermieter from Mietverhältnis
|
||||||
|
$vermieterBeteiligte = $this->entityManager
|
||||||
|
->getRepository('CVmhMietverhltnis')
|
||||||
|
->getRelation($mietverhaeltnis, 'vmhbeteiligtevermieter')
|
||||||
|
->find();
|
||||||
|
|
||||||
|
foreach ($vermieterBeteiligte as $vermieter) {
|
||||||
|
// Link as Vermieter
|
||||||
|
$kuendigungRepo
|
||||||
|
->getRelation($kuendigung, 'vermieter')
|
||||||
|
->relate($vermieter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 9. Get Mieter from Mietverhältnis
|
||||||
|
$mieterBeteiligte = $this->entityManager
|
||||||
|
->getRepository('CVmhMietverhltnis')
|
||||||
|
->getRelation($mietverhaeltnis, 'vmhbeteiligtemieter')
|
||||||
|
->find();
|
||||||
|
|
||||||
|
foreach ($mieterBeteiligte as $mieter) {
|
||||||
|
// Link as Mieter
|
||||||
|
$kuendigungRepo
|
||||||
|
->getRelation($kuendigung, 'mieter')
|
||||||
|
->relate($mieter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 10. Link Portal Contacts
|
||||||
|
$portalContacts = $this->entityManager
|
||||||
|
->getRepository('CVmhMietverhltnis')
|
||||||
|
->getRelation($mietverhaeltnis, 'contactsMietverhltnis')
|
||||||
|
->find();
|
||||||
|
|
||||||
|
foreach ($portalContacts as $contact) {
|
||||||
|
$kuendigungRepo
|
||||||
|
->getRelation($kuendigung, 'contactsKuendigung')
|
||||||
|
->relate($contact);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 11. Commit transaction
|
||||||
|
$this->entityManager->getTransactionManager()->commit();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'id' => $kuendigung->getId(),
|
||||||
|
'name' => $kuendigung->get('name')
|
||||||
|
];
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// Rollback on any error
|
||||||
|
$this->entityManager->getTransactionManager()->rollback();
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,69 +69,69 @@ return [
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
4 => 'CVmhMietverhltnis',
|
4 => 'CVmhMietverhltnis',
|
||||||
5 => 'CVmhRumungsklage',
|
5 => 'CKndigung',
|
||||||
6 => 'CMietinkasso',
|
6 => 'CVmhRumungsklage',
|
||||||
7 => 'CDokumente',
|
7 => 'CMietinkasso',
|
||||||
8 => (object) [
|
8 => 'CDokumente',
|
||||||
|
9 => (object) [
|
||||||
'type' => 'divider',
|
'type' => 'divider',
|
||||||
'id' => '342567',
|
'id' => '342567',
|
||||||
'text' => '$CRM'
|
'text' => '$CRM'
|
||||||
],
|
],
|
||||||
9 => 'Contact',
|
10 => 'Contact',
|
||||||
10 => (object) [
|
11 => (object) [
|
||||||
'type' => 'divider',
|
'type' => 'divider',
|
||||||
'text' => '$Activities',
|
'text' => '$Activities',
|
||||||
'id' => '219419'
|
'id' => '219419'
|
||||||
],
|
],
|
||||||
11 => 'Email',
|
12 => 'Email',
|
||||||
12 => 'Call',
|
13 => 'Call',
|
||||||
13 => 'Task',
|
14 => 'Task',
|
||||||
14 => 'Calendar',
|
15 => 'Calendar',
|
||||||
15 => (object) [
|
16 => (object) [
|
||||||
'type' => 'divider',
|
'type' => 'divider',
|
||||||
'id' => '655187',
|
'id' => '655187',
|
||||||
'text' => '$Support'
|
'text' => '$Support'
|
||||||
],
|
],
|
||||||
16 => 'Case',
|
17 => 'Case',
|
||||||
17 => 'KnowledgeBaseArticle',
|
18 => 'KnowledgeBaseArticle',
|
||||||
18 => (object) [
|
19 => (object) [
|
||||||
'type' => 'divider',
|
'type' => 'divider',
|
||||||
'text' => NULL,
|
'text' => NULL,
|
||||||
'id' => '137994'
|
'id' => '137994'
|
||||||
],
|
],
|
||||||
19 => '_delimiter_',
|
20 => '_delimiter_',
|
||||||
20 => (object) [
|
21 => (object) [
|
||||||
'type' => 'divider',
|
'type' => 'divider',
|
||||||
'text' => '$Marketing',
|
'text' => '$Marketing',
|
||||||
'id' => '463280'
|
'id' => '463280'
|
||||||
],
|
],
|
||||||
21 => 'Campaign',
|
22 => 'Campaign',
|
||||||
22 => 'TargetList',
|
23 => 'TargetList',
|
||||||
23 => (object) [
|
24 => (object) [
|
||||||
'type' => 'divider',
|
'type' => 'divider',
|
||||||
'text' => '$Business',
|
'text' => '$Business',
|
||||||
'id' => '518202'
|
'id' => '518202'
|
||||||
],
|
],
|
||||||
24 => (object) [
|
25 => (object) [
|
||||||
'type' => 'divider',
|
'type' => 'divider',
|
||||||
'text' => '$Organization',
|
'text' => '$Organization',
|
||||||
'id' => '566592'
|
'id' => '566592'
|
||||||
],
|
],
|
||||||
25 => 'User',
|
26 => 'User',
|
||||||
26 => (object) [
|
27 => (object) [
|
||||||
'type' => 'divider',
|
'type' => 'divider',
|
||||||
'text' => NULL,
|
'text' => NULL,
|
||||||
'id' => '898671'
|
'id' => '898671'
|
||||||
],
|
],
|
||||||
27 => 'Team',
|
28 => 'Team',
|
||||||
28 => 'WorkingTimeCalendar',
|
29 => 'WorkingTimeCalendar',
|
||||||
29 => 'EmailTemplate',
|
30 => 'EmailTemplate',
|
||||||
30 => 'Template',
|
31 => 'Template',
|
||||||
31 => 'Import',
|
32 => 'Import',
|
||||||
32 => 'GlobalStream',
|
33 => 'GlobalStream',
|
||||||
33 => 'Report',
|
34 => 'Report',
|
||||||
34 => 'CCallQueues',
|
35 => 'CCallQueues'
|
||||||
35 => 'CKndigung'
|
|
||||||
],
|
],
|
||||||
'quickCreateList' => [
|
'quickCreateList' => [
|
||||||
0 => 'Account',
|
0 => 'Account',
|
||||||
@@ -360,8 +360,8 @@ return [
|
|||||||
0 => 'youtube.com',
|
0 => 'youtube.com',
|
||||||
1 => 'google.com'
|
1 => 'google.com'
|
||||||
],
|
],
|
||||||
'cacheTimestamp' => 1769254421,
|
'cacheTimestamp' => 1769255131,
|
||||||
'microtime' => 1769254421.498616,
|
'microtime' => 1769255131.563756,
|
||||||
'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