EN · DE · RU · FR · ES

#794: BuchungssatzImpl.java

projectforge-business/src/main/java/org/projectforge/reporting/impl/BuchungssatzImpl.java Adaptateur, projectforge-business/src/main/java/org/projectforge/reporting/impl/BuchungssatzImpl.java 143 lignes · 90 code · 27 commentaires · 26 vides

Patron Adaptateur pour BuchungssatzDO

Proxy/adaptateur pour BuchungssatzDO — l'entité JPA représentant une écriture comptable dans org.projectforge.business.fibu.kost. Implémente l'interface de reporting Buchungssatz de org.projectforge.reporting. Javadoc : « Proxy pour BuchungssatzDO ».

Il s'agit du classique patron Adaptateur : une entité JPA ne peut pas implémenter directement une interface de reporting (elles vivent dans des modules séparés avec des graphes de dépendances différents), donc un wrapper délègue tous les appels au DO. Avec 143 lignes, c'est le plus grand wrapper Impl du package de reporting.

Dans son constructeur, il accepte un BuchungssatzDO, extrait les objets associés (Konto, GegenKonto, Kost1, Kost2), et encapsule chacun dans sa classe Impl correspondante : KontoImpl (#795), Kost1Impl, Kost2Impl. Tous les champs sont mis en cache comme final — créés une seule fois lors de la construction et jamais recalculés.

Pourquoi pas BuchungssatzDO implements Buchungssatz ?

L'entité JPA vit dans le module projectforge-business, tandis que l'interface de reporting est consommée par le module de reporting financier. Une dépendance directe créerait une dépendance circulaire. L'adaptateur résout ce problème : le DO ne sait rien du reporting, et le reporting obtient les données via le wrapper. De plus, l'Impl peut transformer les données (par ex. getFormattedMonth() appelant StringHelper.format2DigitNumber()) sans polluer le DO avec une logique de formatage spécifique au reporting.

Délégation des méthodes

Chaque getter délègue simplement au BuchungssatzDO sous-jacent :

MéthodeRetourneSource
getId()LongDélégation directe
getBeleg()Numéro de documentDélégation directe
getBetrag()BigDecimal montantDélégation directe
getComment()ChaîneDélégation directe
getDatum()LocalDateDélégation directe
getGegenKonto()KontoProxy Impl mis en cache
getKonto()KontoProxy Impl mis en cache
getKost1()Kost1Proxy Impl mis en cache
getKost2()Kost2Proxy Impl mis en cache
getMenge()Chaîne de quantitéDélégation directe
getMonth()IntegerDélégation directe
getFormattedMonth()Chaîne à 2 chiffresFormaté via StringHelper
getSatznr()IntegerDélégation directe
getSh()SHType (débit/crédit)Délégation directe
getText()ChaîneDélégation directe
getYear()IntegerDélégation directe

Historique de migration des types

L'ID a été migré de Integer vers Long dans le commit 4c04cfd65. Les champs de date utilisent java.time.LocalDate (migré depuis java.util.Date dans 78b436d9e).

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes des fichiers source : 2024 -> 2025.
4c04cfd65 CHANGEMENT-MAJEUR ! Migration des identifiants integer vers Long (y compris clés étrangères, etc.)
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.
5f7ef41b8 Copyright 2021 -> 2022
ceb63e8a1 En-tête du code source : (C) 2001-2021.
a6a7aece4 Optimiser les imports
78b436d9e Remplacer les instances de java.util.date et java.sql.Date par java.time.LocalDate
7c79f1922 Copyright de l'en-tête source -> 2020.