Refactor AdvowareAkte ↔ CDokumente relationship from junction table to direct n:1 relationship

- Removed CAdvowareAktenCDokumente junction table and associated service.
- Updated CDokumente entity to include foreign key cAdvowareAktenId and related fields.
- Changed relationship in CDokumente from hasMany to belongsTo.
- Updated CAdvowareAkten to reflect new direct relationship.
- Implemented CDokumente service with duplicateDocument method for document duplication.
- Refactored hooks to support new relationship and document propagation.
- Removed obsolete API routes related to the junction table.
- Added i18n translations for new fields and updated tooltips.
- Document flow and auto-linking logic enhanced for better integration with Advoware.
- Validation checks passed, and no data migration needed.
This commit is contained in:
2026-03-23 20:36:10 +01:00
parent 0b829e9dfe
commit 22665948e4
22 changed files with 689 additions and 773 deletions

View File

@@ -130,19 +130,27 @@ class CVmhMietverhltnis extends \Espo\Services\Record
}
// 10. Copy all documents from Mietverhältnis, Mietobjekt and Beteiligte
// 10a. Dokumente vom Mietverhältnis
// Get CDokumente service for duplication
$dokumenteService = $this->injectableFactory->create(\Espo\Custom\Services\CDokumente::class);
// 10a. Dokumente vom Mietverhältnis - DUPLICATE instead of relate
$dokumenteMV = $this->entityManager
->getRepository('CVmhMietverhltnis')
->getRelation($mietverhaeltnis, 'dokumentesvmhMietverhltnisse')
->find();
foreach ($dokumenteMV as $dokument) {
$mietinkassoRepo
->getRelation($mietinkasso, 'dokumentesmietinkasso')
->relate($dokument);
try {
$duplicatedDoc = $dokumenteService->duplicateDocument($dokument->getId());
$mietinkassoRepo
->getRelation($mietinkasso, 'dokumentesmietinkasso')
->relate($duplicatedDoc);
} catch (\Exception $e) {
$GLOBALS['log']->error('Failed to duplicate document from Mietverhältnis: ' . $e->getMessage());
}
}
// 10b. Dokumente vom Mietobjekt
// 10b. Dokumente vom Mietobjekt - DUPLICATE instead of relate
if ($mietobjekt) {
$dokumenteMO = $this->entityManager
->getRepository('CMietobjekt')
@@ -150,13 +158,18 @@ class CVmhMietverhltnis extends \Espo\Services\Record
->find();
foreach ($dokumenteMO as $dokument) {
$mietinkassoRepo
->getRelation($mietinkasso, 'dokumentesmietinkasso')
->relate($dokument);
try {
$duplicatedDoc = $dokumenteService->duplicateDocument($dokument->getId());
$mietinkassoRepo
->getRelation($mietinkasso, 'dokumentesmietinkasso')
->relate($duplicatedDoc);
} catch (\Exception $e) {
$GLOBALS['log']->error('Failed to duplicate document from Mietobjekt: ' . $e->getMessage());
}
}
}
// 10c. Dokumente von allen Beteiligten (Vermieter + Mieter + Sonstige)
// 10c. Dokumente von allen Beteiligten (Vermieter + Mieter + Sonstige) - DUPLICATE instead of relate
$alleBeteiligte = array_merge(
iterator_to_array($vermieterBeteiligte),
iterator_to_array($mieterBeteiligte),
@@ -170,9 +183,14 @@ class CVmhMietverhltnis extends \Espo\Services\Record
->find();
foreach ($dokumenteBet as $dokument) {
$mietinkassoRepo
->getRelation($mietinkasso, 'dokumentesmietinkasso')
->relate($dokument);
try {
$duplicatedDoc = $dokumenteService->duplicateDocument($dokument->getId());
$mietinkassoRepo
->getRelation($mietinkasso, 'dokumentesmietinkasso')
->relate($duplicatedDoc);
} catch (\Exception $e) {
$GLOBALS['log']->error('Failed to duplicate document from Beteiligter: ' . $e->getMessage());
}
}
}