EN · DE · RU · FR · ES

#794: BuchungssatzImpl.java

projectforge-business/src/main/java/org/projectforge/reporting/impl/BuchungssatzImpl.java Adaptador, projectforge-business/src/main/java/org/projectforge/reporting/impl/BuchungssatzImpl.java 143 líneas · 90 código · 27 comentarios · 26 en blanco

Patrón Adaptador para BuchungssatzDO

Proxy/adaptador para BuchungssatzDO — la entidad JPA que representa un asiento contable en org.projectforge.business.fibu.kost. Implementa la interfaz de informes Buchungssatz de org.projectforge.reporting. Javadoc: "Proxy para BuchungssatzDO".

Este es el clásico patrón Adaptador: una entidad JPA no puede implementar directamente una interfaz de informes (viven en módulos separados con diferentes grafos de dependencia), por lo que un envoltorio delega todas las llamadas al DO. Con 143 líneas, es el envoltorio Impl más grande del paquete de informes.

En su constructor, acepta un BuchungssatzDO, extrae objetos relacionados (Konto, GegenKonto, Kost1, Kost2) y envuelve cada uno en su clase Impl correspondiente: KontoImpl (#795), Kost1Impl, Kost2Impl. Todos los campos se almacenan en caché como final — se crean una vez durante la construcción y nunca se recalculan.

¿Por qué no BuchungssatzDO implements Buchungssatz?

La entidad JPA reside en el módulo projectforge-business, mientras que la interfaz de informes es consumida por el módulo de informes financieros. Una dependencia directa crearía una dependencia circular. El Adaptador resuelve esto: el DO no sabe nada sobre informes, y los informes obtienen datos a través del envoltorio. Además, el Impl puede transformar datos (ej. getFormattedMonth() llamando a StringHelper.format2DigitNumber()) sin contaminar el DO con lógica de formato específica de informes.

Delegación de métodos

Cada getter simplemente delega al BuchungssatzDO subyacente:

MétodoRetornaFuente
getId()LongDelegación directa
getBeleg()Número de documentoDelegación directa
getBetrag()BigDecimal importeDelegación directa
getComment()StringDelegación directa
getDatum()LocalDateDelegación directa
getGegenKonto()KontoProxy Impl en caché
getKonto()KontoProxy Impl en caché
getKost1()Kost1Proxy Impl en caché
getKost2()Kost2Proxy Impl en caché
getMenge()Cadena de cantidadDelegación directa
getMonth()IntegerDelegación directa
getFormattedMonth()Cadena de 2 dígitosFormateado vía StringHelper
getSatznr()IntegerDelegación directa
getSh()SHType (débito/crédito)Delegación directa
getText()StringDelegación directa
getYear()IntegerDelegación directa

Historial de migración de tipos

El ID se migró de Integer a Long en el commit 4c04cfd65. Los campos de fecha usan java.time.LocalDate (migrado desde java.util.Date en 78b436d9e).

Historial Git

868d6abb7 2025 -> 2026
63081666f Encabezados de archivos fuente: 2024 -> 2025.
4c04cfd65 CAMBIO MAYOR! Migración de ids integer a ids Long (incluyendo fk's etc.)
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.
5f7ef41b8 Copyright 2021 -> 2022
ceb63e8a1 Encabezado de código fuente: (C) 2001-2021.
a6a7aece4 Optimizar Importaciones
78b436d9e Reemplazar instancias de java.util.date y java.sql.Date con java.time.LocalDate
7c79f1922 Copyright del encabezado fuente -> 2020.