#1000: KostZuweisungDO.kt

projectforge-business/src/main/kotlin/org/projectforge/business/fibu/kost/KostZuweisungDO.kt Type : Entité JPA (DO) · Objectif : Affectation des coûts liant factures/salaires à Kost1/Kost2 · Source : projectforge-business/src/main/kotlin/org/projectforge/business/fibu/kost/KostZuweisungDO.kt 266 lignes · 190 code · 55 commentaires · 21 vides
Représente une affectation de coûts (KostZuweisung) — l'allocation de montants de factures ou de paiements de salaires d'employés à des centres de coûts spécifiques (Kost1 et Kost2). Chaque affectation enregistre un montant net et est liée à exactement un des éléments suivants : une position de facture sortante, une position de facture entrante ou une entrée de salaire d'employé.

Conception de l'entité

ChampTypeColonne DBDescription
indexShortINTIndex dans la liste d'affectations de la position
nettoBigDecimal?DECIMAL(12,2)Montant net alloué à ce centre de coûts
kost1Kost1DO?FK kost1_fkCentre de coûts niveau 1 (ManyToOne, lazy)
kost2Kost2DO?FK kost2_fkCentre de coûts niveau 2 (ManyToOne, lazy)
rechnungsPositionRechnungsPositionDO?FK rechnungs_pos_fkPosition de facture sortante (nullable)
eingangsrechnungsPositionEingangsrechnungsPositionDO?FK eingangsrechnungs_pos_fkPosition de facture entrante (nullable)
employeeSalaryEmployeeSalaryDO?FK employee_salary_fkEntrée de salaire d'employé (nullable)
commentString?VARCHAR(4000)Commentaire optionnel

Propriétés calculées (transitoires)

PropriétéTypeDescription
bruttoBigDecimalMontant brut calculé à partir du net + TVA de la position parente
kost1IdLong?Raccourci pour kost1.id
kost2IdLong?Raccourci pour kost2.id
isEmptyBooleanVrai si netto est nul ou zéro

Contrainte d'exclusion mutuelle

Une KostZuweisung doit être affectée à exactement un objet financier. Le setter pour chacune des trois références applique l'exclusivité mutuelle au niveau Java : définir rechnungsPosition lève une exception si eingangsrechnungsPosition ou employeeSalary est déjà défini, et vice versa. La méthode hasErrors() valide qu'exactement un est assigné (retourne une clé d'erreur i18n si violé).

Détails de persistance

Méthodes utilitaires

Code source (abrégé)

@Entity @Indexed @Table(name = "T_FIBU_KOST_ZUWEISUNG", ...)
open class KostZuweisungDO : DefaultBaseDO(), DisplayNameCapable {
    open var index: Short = 0
    open var netto: BigDecimal? = null
    open var kost1: Kost1DO? = null
    open var kost2: Kost2DO? = null
    open var rechnungsPosition: RechnungsPositionDO? = null
        set(value) { if (value != null && (eingangsrechnungsPosition != null
            || employeeSalary != null)) throw IllegalStateException(...) }

    val brutto: BigDecimal
        @Transient get() {
            val vat = when {
                rechnungsPosition != null -> rechnungsPosition!!.vat
                eingangsrechnungsPosition != null -> eingangsrechnungsPosition!!.vat
                else -> null
            }
            return CurrencyHelper.getGrossAmount(netto, vat)
        }
    // newClone(), hasErrors(), setAbstractRechnungsPosition(), etc.
}

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes des fichiers source : 2024 -> 2025.
0237d5eba Json : IdOnlySerializer et IdsOnlySerializer.
db2599ab8 Historique dans le carnet d'ordres, les factures et les projets.
c8f8ed935 Toutes les entités FetchType.LAZY.
b04a74ffb DisplayHistoryEntry : nouveau concept.
0b32a3f37 Trucs de migration...
4c04cfd65 CHANGEMENT-MAJEUR ! IDs Integer vers IDs Long.
f984352a0 JsonBackReference/JsonManagedReference : KostZuweisungDO
ca27394ef Constantes refactorisées.
b78b870bd ShortDisplayNameCapable -> DisplayNameCapable.
8675a1dbe Entités JPA Kotlin déclarées open (correctif chargement paresseux)
1cf12f943 Kostzuweisung : boucle infinie dans la sérialisation json corrigée.
812b5b751 Gros WIP : refactoring du tueur de perf (Eingangs)Rechnung*
339e017b4 @PropertyInfo supporté pour les méthodes getter.
3bd2b6e9d RechnungRest : Ajouter liste de positions
100cc30f0 KostZuweisungDO.java -> KostZuweisungDO.kt