EN · DE · RU · FR · ES

#820: PfCaches.kt

projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt Kotlin class, projectforge-business/src/main/kotlin/org/projectforge/business/PfCaches.kt 428 lines · 271 code · 98 comments · 59 blank
Purpose: Source file: org/projectforge/business/PfCaches.kt. PfCaches.kt is part of the ProjectForge open-source project management application.

Source (first 100 lines)

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see 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

/**
 * Helper cache for avoiding lazy loading of entities. For convenient access to most caches.
 * Ideal for usage by scripts.
 */
@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
    }

    /**
     * Fills the kunde, projekt and users of the given order.
     * @param order The order to fill.
     * @return The filled order for chaining.
     */
    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 History

868d6abb7 2025 -> 2026
63081666f Source file headers: 2024-> 2025.
27a5e6cad Visitorbook: bugfix on contactPersons. Also affected: vacation, AbstractPagesrest, PagesResolver
22ccc4877 WIP: Scripting
caea043eb Migration stuff in progress... (all tests of all packages: 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, Germany (www.micromata.com)
+// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge is dual-licensed.
 //

63081666f

Source file headers: 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, Germany (www.micromata.com)
+// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge is dual-licensed.
 //

27a5e6cad

Visitorbook: bugfix on contactPersons. Also affected: vacation, 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
     }
 
+    /**
+     * Fills the contact persons (employees).
+     * @param visitorbook The visitorbook to fill.
+     * @return The filled visitorbook for chaining.
+     */
+    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: Scripting
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
     }
 
+    /**
+     * Fills the kunde, projekt and users of the given order.
+     * @param order The order to fill.
+     * @return The filled order for chaining.
+     */
+    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
+    }
+
     /**
      * Fills the user and kost1 of the given employee.
      * @param employee The employee to fill.
@@ -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

Migration stuff in progress... (all tests of all packages: 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 The employee to fill.
      * @return The filled employee for chaining.
      */
-    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 The kost2 to fill.
      * @return The filled kost2 for chaining.
      */
-    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 The project to fill.
      * @return The filled project for chaining.
      */
-    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 The timesheet to fill.
      * @return The filled timesheet for chaining.
      */
-    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 The vacation to fill.
      * @return The filled kost2 for chaining.
      */
-    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 The kost2Id to fill.
      */
     fun getAndPopulateKost2(kost2Id: Long?): Kost2DO? {
-        return getKost2(kost2Id)?.also { populate(it) }
+        return getKost2(kost2Id)?.also { initialize(it) }