EN · DE · RU · FR · ES

#820: PfCaches.kt

projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt Kotlin-Klasse, projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt 428 Zeilen · 271 Code · 98 Kommentare · 59 Leer
Zweck: Quelldatei: org/projectforge/business/PfCaches.kt. PfCaches.kt ist Teil der Open-Source-Projektmanagement-Anwendung ProjectForge.

Quellcode (erste 100 Zeilen)

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2026 Micromata GmbH, Deutschland (www.micromata.com)
//
// ProjectForge ist dual-lizenziert.
//
// Diese Community-Edition ist freie Software; Sie können es weiterverteilen und/oder
// modifizieren unter den Bedingungen der GNU General Public License, wie veröffentlicht
// von der Free Software Foundation; Version 3 der Lizenz.
//
// Diese Community-Edition wird in der Hoffnung verteilt, dass sie nützlich sein wird,
// aber OHNE JEGLICHE GEWÄHRLEISTUNG; ohne die stillschweigende Garantie der
// MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU General
// Public License für weitere Details.
//
// Sie sollten eine Kopie der GNU General Public License zusammen mit
// diesem Programm erhalten haben; falls nicht, siehe http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.business

import jakarta.annotation.PostConstruct
import org.projectforge.business.address.AddressbookCache
import org.projectforge.business.address.AddressbookDO
import org.projectforge.business.fibu.*
import org.projectforge.business.fibu.kost.*
import org.projectforge.business.orga.VisitorbookDO
import org.projectforge.business.task.TaskDO
import org.projectforge.business.task.TaskTree
import org.projectforge.business.teamcal.admin.TeamCalCache
import org.projectforge.business.teamcal.admin.model.TeamCalDO
import org.projectforge.business.timesheet.TimesheetDO
import org.projectforge.business.user.UserGroupCache
import org.projectforge.business.vacation.model.VacationDO
import org.projectforge.framework.persistence.api.BaseDO
import org.projectforge.framework.persistence.user.entities.GroupDO
import org.projectforge.framework.persistence.user.entities.PFUserDO
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service

/**
 * Hilfs-Cache zur Vermeidung von Lazy Loading von Entitäten. Für bequemen Zugriff auf die meisten Caches.
 * Ideal für die Verwendung durch Skripte.
 */
@Service
class PfCaches {
    @Autowired
    private lateinit var kontoCache: KontoCache

    @Autowired
    private lateinit var addressbookCache: AddressbookCache

    @Autowired
    private lateinit var employeeCache: EmployeeCache

    @Autowired
    private lateinit var kostCache: KostCache

    @Autowired
    private lateinit var kundeCache: KundeCache

    @Autowired
    private lateinit var projektCache: ProjektCache

    @Autowired
    private lateinit var rechnungCache: RechnungCache

    @Autowired
    private lateinit var taskTree: TaskTree

    @Autowired
    private lateinit var teamCalCache: TeamCalCache

    @Autowired
    private lateinit var userGroupCache: UserGroupCache

    @PostConstruct
    private fun init() {
        instance = this
    }

    /**
     * Füllt den Kunden, das Projekt und die Benutzer des angegebenen Auftrags.
     * @param order Der zu füllende Auftrag.
     * @return Der gefüllte Auftrag für die Verkettung.
     */
    fun initialize(order: AuftragDO): AuftragDO {
        order.kunde = getKundeIfNotInitialized(order.kunde)
        order.projekt = getProjektIfNotInitialized(order.projekt)
        order.contactPerson = getUserIfNotInitialized(order.contactPerson)
        order.headOfBusinessManager = getUserIfNotInitialized(order.headOfBusinessManager)
        order.projectManager = getUserIfNotInitialized(order.projectManager)
        order.salesManager = getUserIfNotInitialized(order.salesManager)
        // order.paymentSchedules
        // order.positionen
        return order

Git-Verlauf

868d6abb7 2025 -> 2026
63081666f Quellcode-Dateiköpfe: 2024 -> 2025.
27a5e6cad Besucherbuch: Fehlerbehebung bei Kontaktpersonen. Auch betroffen: Urlaub, AbstractPagesrest, PagesResolver
22ccc4877 WIP: Skripterstellung
caea043eb Migrationsarbeit in Arbeit... (alle Tests aller Pakete: OK).

868d6abb7

2025 -> 2026
868d6abb75cd191a892911ac8e45058932cf9074
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt b/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
index 159dec1fb..bcc543053 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
@@ -3,7 +3,7 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2025 Micromata GmbH, Deutschland (www.micromata.com)
+// Copyright (C) 2001-2026 Micromata GmbH, Deutschland (www.micromata.com)
 //
 // ProjectForge ist dual-lizenziert.
 //

63081666f

Quellcode-Dateiköpfe: 2024 -> 2025.
63081666f620fb87315f01b817e560e0b2f6a33a
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt b/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
index 3fcd09f45..159dec1fb 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
@@ -3,7 +3,7 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2024 Micromata GmbH, Deutschland (www.micromata.com)
+// Copyright (C) 2001-2025 Micromata GmbH, Deutschland (www.micromata.com)
 //
 // ProjectForge ist dual-lizenziert.
 //

27a5e6cad

Besucherbuch: Fehlerbehebung bei Kontaktpersonen. Auch betroffen: Urlaub, AbstractPagesrest, PagesResolver
27a5e6cad8d0bc0ee0578fb9fb812e3caff1ab0f
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt b/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
index d8f6c502b..3fcd09f45 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
@@ -28,6 +28,7 @@ import org.projectforge.business.address.AddressbookCache
 import org.projectforge.business.address.AddressbookDO
 import org.projectforge.business.fibu.*
 import org.projectforge.business.fibu.kost.*
+import org.projectforge.business.orga.VisitorbookDO
 import org.projectforge.business.task.TaskDO
 import org.projectforge.business.task.TaskTree
 import org.projectforge.business.teamcal.admin.TeamCalCache
@@ -165,6 +166,17 @@ class PfCaches {
         return vacation
     }
 
+    /**
+     * Füllt die Kontaktpersonen (Mitarbeiter).
+     * @param visitorbook Das zu füllende Besucherbuch.
+     * @return Das gefüllte Besucherbuch für die Verkettung.
+     */
+    fun initialize(visitorbook: VisitorbookDO): VisitorbookDO {
+        visitorbook.contactPersons =
+            visitorbook.contactPersons?.mapNotNull { getEmployeeIfNotInitialized(it) }?.toMutableSet()
+        return visitorbook
+    }
+
     fun initialize(satz: BuchungssatzDO): BuchungssatzDO {
         satz.konto = getKontoIfNotInitialized(satz.konto)
         satz.gegenKonto = getKontoIfNotInitialized(satz.gegenKonto)

22ccc4877

WIP: Skripterstellung
22ccc487728cb7ca4fa66ae3fcaae5a98d6c59bd
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt b/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
index fadf41fe1..d8f6c502b 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
@@ -35,6 +35,7 @@ import org.projectforge.business.teamcal.admin.model.TeamCalDO
 import org.projectforge.business.timesheet.TimesheetDO
 import org.projectforge.business.user.UserGroupCache
 import org.projectforge.business.vacation.model.VacationDO
+import org.projectforge.framework.persistence.api.BaseDO
 import org.projectforge.framework.persistence.user.entities.GroupDO
 import org.projectforge.framework.persistence.user.entities.PFUserDO
 import org.springframework.beans.factory.annotation.Autowired
@@ -64,6 +65,9 @@ class PfCaches {
     @Autowired
     private lateinit var projektCache: ProjektCache
 
+    @Autowired
+    private lateinit var rechnungCache: RechnungCache
+
     @Autowired
     private lateinit var taskTree: TaskTree
 
@@ -78,6 +82,23 @@ class PfCaches {
         instance = this
     }
 
+    /**
+     * Füllt den Kunden, das Projekt und die Benutzer des angegebenen Auftrags.
+     * @param order Der zu füllende Auftrag.
+     * @return Der gefüllte Auftrag für die Verkettung.
+     */
+    fun initialize(order: AuftragDO): AuftragDO {
+        order.kunde = getKundeIfNotInitialized(order.kunde)
+        order.projekt = getProjektIfNotInitialized(order.projekt)
+        order.contactPerson = getUserIfNotInitialized(order.contactPerson)
+        order.headOfBusinessManager = getUserIfNotInitialized(order.headOfBusinessManager)
+        order.projectManager = getUserIfNotInitialized(order.projectManager)
+        order.salesManager = getUserIfNotInitialized(order.salesManager)
+        // order.paymentSchedules
+        // order.positionen
+        return order
+    }
+
     /**
      * Füllt den Benutzer und den Kost1 des angegebenen Mitarbeiters.
      * @param employee Der zu füllende Mitarbeiter.
@@ -144,6 +165,43 @@ class PfCaches {
         return vacation
     }
 
+    fun initialize(satz: BuchungssatzDO): BuchungssatzDO {
+        satz.konto = getKontoIfNotInitialized(satz.konto)
+        satz.gegenKonto = getKontoIfNotInitialized(satz.gegenKonto)
+        satz.kost1 = getKost1IfNotInitialized(satz.kost1)
+        satz.kost2 = getKost2IfNotInitialized(satz.kost2)
+        return satz
+    }
+
+    fun initialize(invoice: RechnungDO): RechnungDO {

caea043eb

Migrationsarbeit in Arbeit... (alle Tests aller Pakete: OK).
caea043eb1c6d1752322fcbe2de762f9b5e6946d
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt b/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
index 536145855..fadf41fe1 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt
@@ -83,7 +83,7 @@ class PfCaches {
      * @param employee Der zu füllende Mitarbeiter.
      * @return Der gefüllte Mitarbeiter für die Verkettung.
      */
-    fun populate(employee: EmployeeDO): EmployeeDO {
+    fun initialize(employee: EmployeeDO): EmployeeDO {
         employee.user = getUserIfNotInitialized(employee.user)
         employee.kost1 = getKost1IfNotInitialized(employee.kost1)
         return employee
@@ -94,7 +94,7 @@ class PfCaches {
      * @param kost2 Der zu füllende Kost2.
      * @return Der gefüllte Kost2 für die Verkettung.
      */
-    fun populate(kost2: Kost2DO): Kost2DO {
+    fun initialize(kost2: Kost2DO): Kost2DO {
         val projekt = getProjektByKost2(kost2.id)
         val kunde = getKunde(projekt?.kunde?.nummer)
         projekt?.let { it.kunde = kunde }
@@ -107,7 +107,7 @@ class PfCaches {
      * @param project Das zu füllende Projekt.
      * @return Das gefüllte Projekt für die Verkettung.
      */
-    fun populate(project: ProjektDO): ProjektDO {
+    fun initialize(project: ProjektDO): ProjektDO {
         project.headOfBusinessManager = getUserIfNotInitialized(project.headOfBusinessManager)
         project.konto = getKontoIfNotInitialized(project.konto)
         project.kunde = getKundeIfNotInitialized(project.kunde)
@@ -123,10 +123,10 @@ class PfCaches {
      * @param timesheet Der zu füllende Zeiterfassungssatz.
      * @return Der gefüllte Zeiterfassungssatz für die Verkettung.
      */
-    fun populate(timesheet: TimesheetDO): TimesheetDO {
+    fun initialize(timesheet: TimesheetDO): TimesheetDO {
         timesheet.user = getUser(timesheet.userId)
         timesheet.task = getTask(timesheet.taskId)
-        timesheet.kost2 = getKost2(timesheet.kost2Id)?.also { populate(it) }
+        timesheet.kost2 = getKost2(timesheet.kost2Id)?.also { initialize(it) }
         return timesheet
     }
 
@@ -135,7 +135,7 @@ class PfCaches {
      * @param vacation Der zu füllende Urlaub.
      * @return Der gefüllte Kost2 für die Verkettung.
      */
-    fun populate(vacation: VacationDO): VacationDO {
+    fun initialize(vacation: VacationDO): VacationDO {
         vacation.employee = getEmployeeIfNotInitialized(vacation.employee)
         vacation.manager = getEmployeeIfNotInitialized(vacation.manager)
         vacation.replacement = getEmployeeIfNotInitialized(vacation.replacement)
@@ -149,7 +149,7 @@ class PfCaches {
      * @param kost2Id Die zu füllende Kost2-ID.
      */
     fun getAndPopulateKost2(kost2Id: Long?): Kost2DO? {
-        return getKost2(kost2Id)?.also { populate(it) }
+        return getKost2(kost2Id)?.also { initialize(it) }