Compare commits
2 Commits
146a046a0e
...
067344866d
| Author | SHA1 | Date | |
|---|---|---|---|
| 067344866d | |||
| c92dbf7191 |
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@@ -71,6 +71,10 @@
|
||||
"/^python3 custom/scripts/validate_and_rebuild\\.py 2>&1 \\| tail -60$/": {
|
||||
"approve": true,
|
||||
"matchCommandLine": true
|
||||
},
|
||||
"/^bash custom/scripts/ki-overview\\.sh$/": {
|
||||
"approve": true,
|
||||
"matchCommandLine": true
|
||||
}
|
||||
}
|
||||
}
|
||||
70
client/custom/src/handlers/kuendigung/eviction-action.js
Normal file
70
client/custom/src/handlers/kuendigung/eviction-action.js
Normal file
@@ -0,0 +1,70 @@
|
||||
define('custom:handlers/kuendigung/eviction-action', [], function () {
|
||||
|
||||
class EvictionActionHandler {
|
||||
|
||||
constructor(view) {
|
||||
this.view = view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup-Methode wird automatisch aufgerufen
|
||||
*/
|
||||
initInitiateEviction() {
|
||||
// Optional: Button-Logik nach Render
|
||||
}
|
||||
|
||||
/**
|
||||
* Action-Handler (wird bei Button-Click aufgerufen)
|
||||
*/
|
||||
actionInitiateEviction() {
|
||||
console.log('actionInitiateEviction called from Kündigung');
|
||||
const model = this.view.model;
|
||||
|
||||
// Confirmation Dialog
|
||||
this.view.confirm(
|
||||
this.view.translate('confirmEviction', 'messages', 'CKuendigung'),
|
||||
() => {
|
||||
console.log('Confirmation accepted, initiating eviction from Kündigung');
|
||||
this.initiateEviction(model.id);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* AJAX Request zum Backend
|
||||
*/
|
||||
initiateEviction(kuendigungId) {
|
||||
Espo.Ui.notify(this.view.translate('pleaseWait', 'messages'));
|
||||
|
||||
Espo.Ajax.postRequest('CKuendigung/action/initiateEviction', {
|
||||
id: kuendigungId
|
||||
})
|
||||
.then(response => {
|
||||
Espo.Ui.success(
|
||||
this.view.translate('evictionCreated', 'messages', 'CKuendigung')
|
||||
);
|
||||
|
||||
// Navigation zur erstellten Räumungsklage
|
||||
this.view.getRouter().navigate(
|
||||
'#CVmhRumungsklage/view/' + response.id,
|
||||
{trigger: true}
|
||||
);
|
||||
})
|
||||
.catch(xhr => {
|
||||
console.error('Eviction initiation failed:', xhr);
|
||||
|
||||
let errorMessage = this.view.translate('evictionError', 'messages', 'CKuendigung');
|
||||
|
||||
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 EvictionActionHandler;
|
||||
});
|
||||
@@ -46,7 +46,7 @@ define('custom:handlers/mietverhaeltnis/termination-action', [], function () {
|
||||
|
||||
// Navigation zur erstellten Kündigung
|
||||
this.view.getRouter().navigate(
|
||||
'#CKndigung/view/' + response.id,
|
||||
'#CKuendigung/view/' + response.id,
|
||||
{trigger: true}
|
||||
);
|
||||
})
|
||||
|
||||
@@ -2,6 +2,26 @@
|
||||
|
||||
namespace Espo\Custom\Controllers;
|
||||
|
||||
use Espo\Core\Exceptions\BadRequest;
|
||||
use Espo\Core\Api\Request;
|
||||
|
||||
class CKuendigung extends \Espo\Core\Templates\Controllers\BasePlus
|
||||
{
|
||||
/**
|
||||
* POST Action: Initiate eviction lawsuit from Kündigung
|
||||
*/
|
||||
public function postActionInitiateEviction(Request $request): array
|
||||
{
|
||||
$data = $request->getParsedBody();
|
||||
|
||||
$id = $data->id ?? null;
|
||||
if (!$id) {
|
||||
throw new BadRequest('No Kündigung ID provided');
|
||||
}
|
||||
|
||||
$service = $this->getRecordService();
|
||||
$result = $service->initiateEviction($id);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,13 @@
|
||||
},
|
||||
"labels": {
|
||||
"Create CKuendigung": "Kündigung erstellen",
|
||||
"CKuendigung": "Kündigung"
|
||||
"CKuendigung": "Kündigung",
|
||||
"Initiate Eviction": "Räumungsklage einleiten"
|
||||
},
|
||||
"messages": {
|
||||
"confirmEviction": "Möchten Sie wirklich eine Räumungsklage aus dieser Kündigung einleiten?",
|
||||
"evictionCreated": "Räumungsklage wurde erfolgreich erstellt",
|
||||
"evictionError": "Fehler beim Erstellen der Räumungsklage"
|
||||
},
|
||||
"fields": {
|
||||
"name": "Name",
|
||||
|
||||
@@ -47,7 +47,13 @@
|
||||
},
|
||||
"labels": {
|
||||
"Create CKuendigung": "Create Termination",
|
||||
"CKuendigung": "Termination"
|
||||
"CKuendigung": "Termination",
|
||||
"Initiate Eviction": "Initiate Eviction"
|
||||
},
|
||||
"messages": {
|
||||
"confirmEviction": "Do you really want to initiate an eviction lawsuit from this termination?",
|
||||
"evictionCreated": "Eviction lawsuit created successfully",
|
||||
"evictionError": "Error creating eviction lawsuit"
|
||||
},
|
||||
"options": {
|
||||
"beendigungsTatbestand": {
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
"boolFilterList": [
|
||||
"onlyMy"
|
||||
],
|
||||
"menu": {
|
||||
"detail": {
|
||||
"buttons": [
|
||||
{
|
||||
"name": "initiateEviction",
|
||||
"label": "Initiate Eviction",
|
||||
"handler": "custom:handlers/kuendigung/eviction-action",
|
||||
"initFunction": "initInitiateEviction",
|
||||
"actionFunction": "actionInitiateEviction",
|
||||
"iconHtml": "<span class=\"fas fa-gavel\"></span>",
|
||||
"style": "danger",
|
||||
"acl": "edit"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"sidePanels": {
|
||||
"detail": [
|
||||
{
|
||||
|
||||
302
custom/Espo/Custom/Services/CKuendigung.php
Normal file
302
custom/Espo/Custom/Services/CKuendigung.php
Normal file
@@ -0,0 +1,302 @@
|
||||
<?php
|
||||
|
||||
namespace Espo\Custom\Services;
|
||||
|
||||
use Espo\Core\Exceptions\Forbidden;
|
||||
use Espo\Core\Exceptions\NotFound;
|
||||
|
||||
class CKuendigung extends \Espo\Services\Record
|
||||
{
|
||||
/**
|
||||
* Initiate eviction lawsuit (Räumungsklage) from Kündigung
|
||||
*
|
||||
* @param string $kuendigungId
|
||||
* @return array
|
||||
* @throws NotFound
|
||||
* @throws Forbidden
|
||||
*/
|
||||
public function initiateEviction(string $kuendigungId): array
|
||||
{
|
||||
// 1. Load Kündigung
|
||||
$kuendigung = $this->entityManager->getEntity('CKuendigung', $kuendigungId);
|
||||
if (!$kuendigung) {
|
||||
throw new NotFound('Kündigung not found');
|
||||
}
|
||||
|
||||
// 2. ACL Checks
|
||||
if (!$this->acl->check($kuendigung, 'read')) {
|
||||
throw new Forbidden('No read access to Kündigung');
|
||||
}
|
||||
|
||||
if (!$this->acl->checkScope('CVmhRumungsklage', 'create')) {
|
||||
throw new Forbidden('No create access to Räumungsklage');
|
||||
}
|
||||
|
||||
// 3. Start Transaction
|
||||
$this->entityManager->getTransactionManager()->start();
|
||||
|
||||
try {
|
||||
// 4. Collect all related Mietverhältnisse from this Kündigung
|
||||
$alleMietverhaeltnisse = [];
|
||||
$mietverhaeltnisse = $this->entityManager
|
||||
->getRepository('CKuendigung')
|
||||
->getRelation($kuendigung, 'vmhMietverhltnises')
|
||||
->find();
|
||||
|
||||
foreach ($mietverhaeltnisse as $mv) {
|
||||
$alleMietverhaeltnisse[] = $mv;
|
||||
}
|
||||
|
||||
// 5. Collect all related Kündigungen (this one + any others from Mietverhältnisse)
|
||||
$alleKuendigungen = [$kuendigung];
|
||||
$alleKuendigungIds = [$kuendigung->getId()];
|
||||
|
||||
foreach ($alleMietverhaeltnisse as $mv) {
|
||||
$kuendigungen = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mv, 'kndigungen')
|
||||
->find();
|
||||
|
||||
foreach ($kuendigungen as $k) {
|
||||
if (!in_array($k->getId(), $alleKuendigungIds)) {
|
||||
$alleKuendigungen[] = $k;
|
||||
$alleKuendigungIds[] = $k->getId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 6. Get Advoware fields from Kündigungen (first with values)
|
||||
$advowareAktenzeichen = null;
|
||||
$aktennr = null;
|
||||
|
||||
foreach ($alleKuendigungen as $k) {
|
||||
if (!$advowareAktenzeichen && $k->get('advowareAktenzeichen')) {
|
||||
$advowareAktenzeichen = $k->get('advowareAktenzeichen');
|
||||
}
|
||||
if (!$aktennr && $k->get('aktennr')) {
|
||||
$aktennr = $k->get('aktennr');
|
||||
}
|
||||
if ($advowareAktenzeichen && $aktennr) {
|
||||
break; // Found both, no need to continue
|
||||
}
|
||||
}
|
||||
|
||||
// 7. Prepare data for new Räumungsklage
|
||||
$data = new \stdClass();
|
||||
$data->name = 'Räumungsklage - ' . $kuendigung->get('name');
|
||||
|
||||
// Copy Advoware fields if found
|
||||
if ($advowareAktenzeichen) {
|
||||
$data->advowareAktenzeichen = $advowareAktenzeichen;
|
||||
}
|
||||
if ($aktennr) {
|
||||
$data->aktennr = $aktennr;
|
||||
}
|
||||
|
||||
// Copy assignedUser and teams
|
||||
if ($kuendigung->get('assignedUserId')) {
|
||||
$data->assignedUserId = $kuendigung->get('assignedUserId');
|
||||
}
|
||||
|
||||
$teamsIds = $kuendigung->getLinkMultipleIdList('teams');
|
||||
if (!empty($teamsIds)) {
|
||||
$data->teamsIds = $teamsIds;
|
||||
}
|
||||
|
||||
// 8. Create Räumungsklage entity
|
||||
$raeumungsklage = $this->entityManager->createEntity('CVmhRumungsklage', (array)$data);
|
||||
|
||||
if (!$raeumungsklage) {
|
||||
throw new \RuntimeException('Failed to create Räumungsklage');
|
||||
}
|
||||
|
||||
$raeumungsklagenRepo = $this->entityManager->getRepository('CVmhRumungsklage');
|
||||
|
||||
// 9. Link all Mietverhältnisse to Räumungsklage
|
||||
foreach ($alleMietverhaeltnisse as $mv) {
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'vmhMietverhltnises')
|
||||
->relate($mv);
|
||||
}
|
||||
|
||||
// 10. Collect all Mietobjekte from all Mietverhältnisse
|
||||
$alleMietobjekte = [];
|
||||
foreach ($alleMietverhaeltnisse as $mv) {
|
||||
$mietobjekt = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mv, 'vmhMietobjekt')
|
||||
->findOne();
|
||||
|
||||
if ($mietobjekt && !in_array($mietobjekt->getId(), array_map(fn($m) => $m->getId(), $alleMietobjekte))) {
|
||||
$alleMietobjekte[] = $mietobjekt;
|
||||
}
|
||||
}
|
||||
|
||||
// Link all unique Mietobjekte
|
||||
foreach ($alleMietobjekte as $mietobjekt) {
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'mietobjekte')
|
||||
->relate($mietobjekt);
|
||||
}
|
||||
|
||||
// 11. Collect all Beteiligte from all Mietverhältnisse
|
||||
$alleVermieter = [];
|
||||
$alleMieter = [];
|
||||
$alleSonstigeBewohner = [];
|
||||
|
||||
foreach ($alleMietverhaeltnisse as $mv) {
|
||||
// Vermieter
|
||||
$vermieterBeteiligte = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mv, 'vmhbeteiligtevermieter')
|
||||
->find();
|
||||
|
||||
foreach ($vermieterBeteiligte as $vermieter) {
|
||||
if (!in_array($vermieter->getId(), array_map(fn($v) => $v->getId(), $alleVermieter))) {
|
||||
$alleVermieter[] = $vermieter;
|
||||
}
|
||||
}
|
||||
|
||||
// Mieter
|
||||
$mieterBeteiligte = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mv, 'vmhbeteiligtemieter')
|
||||
->find();
|
||||
|
||||
foreach ($mieterBeteiligte as $mieter) {
|
||||
if (!in_array($mieter->getId(), array_map(fn($m) => $m->getId(), $alleMieter))) {
|
||||
$alleMieter[] = $mieter;
|
||||
}
|
||||
}
|
||||
|
||||
// Sonstige Bewohner
|
||||
$sonstigeBewohner = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mv, 'sonstigebesitzervmhmietverhltnis')
|
||||
->find();
|
||||
|
||||
foreach ($sonstigeBewohner as $bewohner) {
|
||||
if (!in_array($bewohner->getId(), array_map(fn($b) => $b->getId(), $alleSonstigeBewohner))) {
|
||||
$alleSonstigeBewohner[] = $bewohner;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Link Vermieter as Kläger
|
||||
foreach ($alleVermieter as $vermieter) {
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'klaeger')
|
||||
->relate($vermieter);
|
||||
}
|
||||
|
||||
// Link Mieter and Sonstige as Beklagte
|
||||
foreach (array_merge($alleMieter, $alleSonstigeBewohner) as $beklagter) {
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'beklagte')
|
||||
->relate($beklagter);
|
||||
}
|
||||
|
||||
// 12. Collect all documents from Mietverhältnisse, Kündigungen, Mietobjekte and Beteiligte
|
||||
$alleLinkedDokumente = [];
|
||||
|
||||
// 12a. Dokumente from all Mietverhältnisse
|
||||
foreach ($alleMietverhaeltnisse as $mv) {
|
||||
$dokumenteMV = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mv, 'dokumentesvmhMietverhltnisse')
|
||||
->find();
|
||||
|
||||
foreach ($dokumenteMV as $dokument) {
|
||||
if (!in_array($dokument->getId(), $alleLinkedDokumente)) {
|
||||
$alleLinkedDokumente[] = $dokument->getId();
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'dokumentesvmhraumungsklage')
|
||||
->relate($dokument);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 12b. Dokumente from all Kündigungen
|
||||
foreach ($alleKuendigungen as $k) {
|
||||
$dokumenteKuendigung = $this->entityManager
|
||||
->getRepository('CKuendigung')
|
||||
->getRelation($k, 'dokumenteskuendigung')
|
||||
->find();
|
||||
|
||||
foreach ($dokumenteKuendigung as $dokument) {
|
||||
if (!in_array($dokument->getId(), $alleLinkedDokumente)) {
|
||||
$alleLinkedDokumente[] = $dokument->getId();
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'dokumentesvmhraumungsklage')
|
||||
->relate($dokument);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 12c. Dokumente from all Mietobjekte
|
||||
foreach ($alleMietobjekte as $mietobjekt) {
|
||||
$dokumenteMO = $this->entityManager
|
||||
->getRepository('CMietobjekt')
|
||||
->getRelation($mietobjekt, 'dokumentesMietobjekt')
|
||||
->find();
|
||||
|
||||
foreach ($dokumenteMO as $dokument) {
|
||||
if (!in_array($dokument->getId(), $alleLinkedDokumente)) {
|
||||
$alleLinkedDokumente[] = $dokument->getId();
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'dokumentesvmhraumungsklage')
|
||||
->relate($dokument);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 12d. Dokumente from all Beteiligte
|
||||
$alleBeteiligte = array_merge($alleVermieter, $alleMieter, $alleSonstigeBewohner);
|
||||
foreach ($alleBeteiligte as $beteiligter) {
|
||||
$dokumenteBet = $this->entityManager
|
||||
->getRepository('CBeteiligte')
|
||||
->getRelation($beteiligter, 'dokumentesBeteiligte')
|
||||
->find();
|
||||
|
||||
foreach ($dokumenteBet as $dokument) {
|
||||
if (!in_array($dokument->getId(), $alleLinkedDokumente)) {
|
||||
$alleLinkedDokumente[] = $dokument->getId();
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'dokumentesvmhraumungsklage')
|
||||
->relate($dokument);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 13. Copy portal contacts from all Mietverhältnisse
|
||||
$alleLinkedContacts = [];
|
||||
foreach ($alleMietverhaeltnisse as $mv) {
|
||||
$portalContacts = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mv, 'contactsMietverhltnis')
|
||||
->find();
|
||||
|
||||
foreach ($portalContacts as $contact) {
|
||||
if (!in_array($contact->getId(), $alleLinkedContacts)) {
|
||||
$alleLinkedContacts[] = $contact->getId();
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'contactsRumungsklage')
|
||||
->relate($contact);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 14. Commit transaction
|
||||
$this->entityManager->getTransactionManager()->commit();
|
||||
|
||||
return [
|
||||
'id' => $raeumungsklage->getId(),
|
||||
'name' => $raeumungsklage->get('name')
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
// Rollback on any error
|
||||
$this->entityManager->getTransactionManager()->rollback();
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -36,10 +36,48 @@ class CVmhMietverhltnis extends \Espo\Services\Record
|
||||
$this->entityManager->getTransactionManager()->start();
|
||||
|
||||
try {
|
||||
// 4. Prepare data for new Räumungsklage
|
||||
// 4. Collect all related Mietverhältnisse (just this one)
|
||||
$alleMietverhaeltnisse = [$mietverhaeltnis];
|
||||
|
||||
// 5. Collect all related Kündigungen from this Mietverhältnis
|
||||
$alleKuendigungen = [];
|
||||
$kuendigungen = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mietverhaeltnis, 'kndigungen')
|
||||
->find();
|
||||
|
||||
foreach ($kuendigungen as $kuendigung) {
|
||||
$alleKuendigungen[] = $kuendigung;
|
||||
}
|
||||
|
||||
// 6. Get Advoware fields from Kündigungen (first with values)
|
||||
$advowareAktenzeichen = null;
|
||||
$aktennr = null;
|
||||
|
||||
foreach ($alleKuendigungen as $kuendigung) {
|
||||
if (!$advowareAktenzeichen && $kuendigung->get('advowareAktenzeichen')) {
|
||||
$advowareAktenzeichen = $kuendigung->get('advowareAktenzeichen');
|
||||
}
|
||||
if (!$aktennr && $kuendigung->get('aktennr')) {
|
||||
$aktennr = $kuendigung->get('aktennr');
|
||||
}
|
||||
if ($advowareAktenzeichen && $aktennr) {
|
||||
break; // Found both, no need to continue
|
||||
}
|
||||
}
|
||||
|
||||
// 7. Prepare data for new Räumungsklage
|
||||
$data = new \stdClass();
|
||||
$data->name = 'Räumungsklage - ' . $mietverhaeltnis->get('name');
|
||||
|
||||
// Copy Advoware fields if found
|
||||
if ($advowareAktenzeichen) {
|
||||
$data->advowareAktenzeichen = $advowareAktenzeichen;
|
||||
}
|
||||
if ($aktennr) {
|
||||
$data->aktennr = $aktennr;
|
||||
}
|
||||
|
||||
// Copy assignedUser and teams
|
||||
if ($mietverhaeltnis->get('assignedUserId')) {
|
||||
$data->assignedUserId = $mietverhaeltnis->get('assignedUserId');
|
||||
@@ -50,7 +88,7 @@ class CVmhMietverhltnis extends \Espo\Services\Record
|
||||
$data->teamsIds = $teamsIds;
|
||||
}
|
||||
|
||||
// 5. Create Räumungsklage entity
|
||||
// 8. Create Räumungsklage entity
|
||||
$raeumungsklage = $this->entityManager->createEntity('CVmhRumungsklage', (array)$data);
|
||||
|
||||
if (!$raeumungsklage) {
|
||||
@@ -59,96 +97,146 @@ class CVmhMietverhltnis extends \Espo\Services\Record
|
||||
|
||||
$raeumungsklagenRepo = $this->entityManager->getRepository('CVmhRumungsklage');
|
||||
|
||||
// 6. Link Mietverhältnis to Räumungsklage
|
||||
// 9. Link all Mietverhältnisse to Räumungsklage
|
||||
foreach ($alleMietverhaeltnisse as $mv) {
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'vmhMietverhltnises')
|
||||
->relate($mietverhaeltnis);
|
||||
->relate($mv);
|
||||
}
|
||||
|
||||
// 7. Get and link Mietobjekt
|
||||
// 10. Collect all Mietobjekte from all Mietverhältnisse
|
||||
$alleMietobjekte = [];
|
||||
foreach ($alleMietverhaeltnisse as $mv) {
|
||||
$mietobjekt = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mietverhaeltnis, 'vmhMietobjekt')
|
||||
->getRelation($mv, 'vmhMietobjekt')
|
||||
->findOne();
|
||||
|
||||
if ($mietobjekt) {
|
||||
if ($mietobjekt && !in_array($mietobjekt->getId(), array_map(fn($m) => $m->getId(), $alleMietobjekte))) {
|
||||
$alleMietobjekte[] = $mietobjekt;
|
||||
}
|
||||
}
|
||||
|
||||
// Link all unique Mietobjekte
|
||||
foreach ($alleMietobjekte as $mietobjekt) {
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'mietobjekte')
|
||||
->relate($mietobjekt);
|
||||
}
|
||||
|
||||
// 8. Get Vermieter (Kläger) from Mietverhältnis
|
||||
// 11. Collect all Beteiligte from all Mietverhältnisse
|
||||
$alleVermieter = [];
|
||||
$alleMieter = [];
|
||||
$alleSonstigeBewohner = [];
|
||||
|
||||
foreach ($alleMietverhaeltnisse as $mv) {
|
||||
// Vermieter
|
||||
$vermieterBeteiligte = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mietverhaeltnis, 'vmhbeteiligtevermieter')
|
||||
->getRelation($mv, 'vmhbeteiligtevermieter')
|
||||
->find();
|
||||
|
||||
foreach ($vermieterBeteiligte as $vermieter) {
|
||||
// Link as Kläger
|
||||
if (!in_array($vermieter->getId(), array_map(fn($v) => $v->getId(), $alleVermieter))) {
|
||||
$alleVermieter[] = $vermieter;
|
||||
}
|
||||
}
|
||||
|
||||
// Mieter
|
||||
$mieterBeteiligte = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mv, 'vmhbeteiligtemieter')
|
||||
->find();
|
||||
|
||||
foreach ($mieterBeteiligte as $mieter) {
|
||||
if (!in_array($mieter->getId(), array_map(fn($m) => $m->getId(), $alleMieter))) {
|
||||
$alleMieter[] = $mieter;
|
||||
}
|
||||
}
|
||||
|
||||
// Sonstige Bewohner
|
||||
$sonstigeBewohner = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mv, 'sonstigebesitzervmhmietverhltnis')
|
||||
->find();
|
||||
|
||||
foreach ($sonstigeBewohner as $bewohner) {
|
||||
if (!in_array($bewohner->getId(), array_map(fn($b) => $b->getId(), $alleSonstigeBewohner))) {
|
||||
$alleSonstigeBewohner[] = $bewohner;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Link Vermieter as Kläger
|
||||
foreach ($alleVermieter as $vermieter) {
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'klaeger')
|
||||
->relate($vermieter);
|
||||
}
|
||||
|
||||
// 9. Get Mieter (Beklagte) from Mietverhältnis
|
||||
$mieterBeteiligte = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mietverhaeltnis, 'vmhbeteiligtemieter')
|
||||
->find();
|
||||
|
||||
foreach ($mieterBeteiligte as $mieter) {
|
||||
// Link as Beklagte
|
||||
// Link Mieter and Sonstige as Beklagte
|
||||
foreach (array_merge($alleMieter, $alleSonstigeBewohner) as $beklagter) {
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'beklagte')
|
||||
->relate($mieter);
|
||||
->relate($beklagter);
|
||||
}
|
||||
|
||||
// 9b. Get Sonstige Bewohner (auch Beklagte) from Mietverhältnis
|
||||
$sonstigeBewohner = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mietverhaeltnis, 'sonstigebesitzervmhmietverhltnis')
|
||||
->find();
|
||||
// 12. Collect all documents from Mietverhältnisse, Kündigungen, Mietobjekte and Beteiligte
|
||||
$alleLinkedDokumente = [];
|
||||
|
||||
foreach ($sonstigeBewohner as $bewohner) {
|
||||
// Link as Beklagte
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'beklagte')
|
||||
->relate($bewohner);
|
||||
}
|
||||
|
||||
// 10. Copy all documents from Mietverhältnis, Mietobjekt and Beteiligte
|
||||
// 10a. Dokumente vom Mietverhältnis
|
||||
// 12a. Dokumente from all Mietverhältnisse
|
||||
foreach ($alleMietverhaeltnisse as $mv) {
|
||||
$dokumenteMV = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mietverhaeltnis, 'dokumentesvmhMietverhltnisse')
|
||||
->getRelation($mv, 'dokumentesvmhMietverhltnisse')
|
||||
->find();
|
||||
|
||||
foreach ($dokumenteMV as $dokument) {
|
||||
if (!in_array($dokument->getId(), $alleLinkedDokumente)) {
|
||||
$alleLinkedDokumente[] = $dokument->getId();
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'dokumentesvmhraumungsklage')
|
||||
->relate($dokument);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 10b. Dokumente vom Mietobjekt
|
||||
if ($mietobjekt) {
|
||||
// 12b. Dokumente from all Kündigungen
|
||||
foreach ($alleKuendigungen as $kuendigung) {
|
||||
$dokumenteKuendigung = $this->entityManager
|
||||
->getRepository('CKuendigung')
|
||||
->getRelation($kuendigung, 'dokumenteskuendigung')
|
||||
->find();
|
||||
|
||||
foreach ($dokumenteKuendigung as $dokument) {
|
||||
if (!in_array($dokument->getId(), $alleLinkedDokumente)) {
|
||||
$alleLinkedDokumente[] = $dokument->getId();
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'dokumentesvmhraumungsklage')
|
||||
->relate($dokument);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 12c. Dokumente from all Mietobjekte
|
||||
foreach ($alleMietobjekte as $mietobjekt) {
|
||||
$dokumenteMO = $this->entityManager
|
||||
->getRepository('CMietobjekt')
|
||||
->getRelation($mietobjekt, 'dokumentesMietobjekt')
|
||||
->find();
|
||||
|
||||
foreach ($dokumenteMO as $dokument) {
|
||||
if (!in_array($dokument->getId(), $alleLinkedDokumente)) {
|
||||
$alleLinkedDokumente[] = $dokument->getId();
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'dokumentesvmhraumungsklage')
|
||||
->relate($dokument);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 10c. Dokumente von allen Beteiligten (Vermieter + Mieter + Sonstige)
|
||||
$alleBeteiligte = array_merge(
|
||||
iterator_to_array($vermieterBeteiligte),
|
||||
iterator_to_array($mieterBeteiligte),
|
||||
iterator_to_array($sonstigeBewohner)
|
||||
);
|
||||
|
||||
// 12d. Dokumente from all Beteiligte
|
||||
$alleBeteiligte = array_merge($alleVermieter, $alleMieter, $alleSonstigeBewohner);
|
||||
foreach ($alleBeteiligte as $beteiligter) {
|
||||
$dokumenteBet = $this->entityManager
|
||||
->getRepository('CBeteiligte')
|
||||
@@ -156,25 +244,34 @@ class CVmhMietverhltnis extends \Espo\Services\Record
|
||||
->find();
|
||||
|
||||
foreach ($dokumenteBet as $dokument) {
|
||||
if (!in_array($dokument->getId(), $alleLinkedDokumente)) {
|
||||
$alleLinkedDokumente[] = $dokument->getId();
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'dokumentesvmhraumungsklage')
|
||||
->relate($dokument);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 11. Copy portal contacts from Mietverhältnis (nur vom Mietverhältnis!)
|
||||
// 13. Copy portal contacts from all Mietverhältnisse
|
||||
$alleLinkedContacts = [];
|
||||
foreach ($alleMietverhaeltnisse as $mv) {
|
||||
$portalContacts = $this->entityManager
|
||||
->getRepository('CVmhMietverhltnis')
|
||||
->getRelation($mietverhaeltnis, 'contactsMietverhltnis')
|
||||
->getRelation($mv, 'contactsMietverhltnis')
|
||||
->find();
|
||||
|
||||
foreach ($portalContacts as $contact) {
|
||||
if (!in_array($contact->getId(), $alleLinkedContacts)) {
|
||||
$alleLinkedContacts[] = $contact->getId();
|
||||
$raeumungsklagenRepo
|
||||
->getRelation($raeumungsklage, 'contactsRumungsklage')
|
||||
->relate($contact);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 12. Commit transaction
|
||||
// 14. Commit transaction
|
||||
$this->entityManager->getTransactionManager()->commit();
|
||||
|
||||
return [
|
||||
|
||||
@@ -69,7 +69,7 @@ return [
|
||||
]
|
||||
],
|
||||
4 => 'CVmhMietverhltnis',
|
||||
5 => 'CKndigung',
|
||||
5 => 'CKuendigung',
|
||||
6 => 'CVmhRumungsklage',
|
||||
7 => 'CMietinkasso',
|
||||
8 => 'CDokumente',
|
||||
@@ -142,7 +142,8 @@ return [
|
||||
5 => 'Call',
|
||||
6 => 'Task',
|
||||
7 => 'Case',
|
||||
8 => 'Email'
|
||||
8 => 'Email',
|
||||
9 => 'CKuendigung'
|
||||
],
|
||||
'exportDisabled' => false,
|
||||
'adminNotifications' => true,
|
||||
@@ -360,8 +361,8 @@ return [
|
||||
0 => 'youtube.com',
|
||||
1 => 'google.com'
|
||||
],
|
||||
'cacheTimestamp' => 1769343499,
|
||||
'microtime' => 1769343499.205843,
|
||||
'cacheTimestamp' => 1769346856,
|
||||
'microtime' => 1769346856.162518,
|
||||
'siteUrl' => 'https://crm.bitbylaw.com',
|
||||
'fullTextSearchMinLength' => 4,
|
||||
'appTimestamp' => 1768843902,
|
||||
|
||||
Reference in New Issue
Block a user