#1000: KostZuweisungDO.kt

projectforge-business/src/main/kotlin/org/projectforge/business/fibu/kost/KostZuweisungDO.kt Tipo: Entidad JPA (DO) · Propósito: Asignación de costos que vincula facturas/salarios a Kost1/Kost2 · Fuente: projectforge-business/src/main/kotlin/org/projectforge/business/fibu/kost/KostZuweisungDO.kt 266 líneas · 190 código · 55 comentarios · 21 en blanco
Representa una asignación de costos (KostZuweisung) — la distribución de montos de facturas o pagos de salarios de empleados a centros de costo específicos (Kost1 y Kost2). Cada asignación registra un monto neto y se vincula exactamente a uno de: una posición de factura emitida, una posición de factura recibida o una entrada de salario de empleado.

Diseño de la Entidad

CampoTipoColumna BDDescripción
indexShortINTÍndice de matriz dentro de la lista de asignaciones de la posición
nettoBigDecimal?DECIMAL(12,2)Monto neto asignado a este centro de costo
kost1Kost1DO?FK kost1_fkCentro de costo nivel 1 (ManyToOne, lazy)
kost2Kost2DO?FK kost2_fkCentro de costo nivel 2 (ManyToOne, lazy)
rechnungsPositionRechnungsPositionDO?FK rechnungs_pos_fkPosición de factura emitida (nullable)
eingangsrechnungsPositionEingangsrechnungsPositionDO?FK eingangsrechnungs_pos_fkPosición de factura recibida (nullable)
employeeSalaryEmployeeSalaryDO?FK employee_salary_fkEntrada de salario de empleado (nullable)
commentString?VARCHAR(4000)Comentario opcional

Propiedades Calculadas (Transitorias)

PropiedadTipoDescripción
bruttoBigDecimalMonto bruto calculado a partir del neto + IVA de la posición padre
kost1IdLong?Acceso directo a kost1.id
kost2IdLong?Acceso directo a kost2.id
isEmptyBooleanVerdadero si netto es nulo o cero

Restricción de Exclusión Mutua

Un KostZuweisung debe asignarse exactamente a un objeto financiero. El setter de cada una de las tres referencias aplica exclusividad mutua a nivel de Java: establecer rechnungsPosition lanza una excepción si eingangsrechnungsPosition o employeeSalary ya está establecido, y viceversa. El método hasErrors() valida que exactamente uno esté asignado (devuelve una clave de error i18n si se viola).

Detalles de Persistencia

Métodos Utilitarios

Código Fuente (resumido)

@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.
}

Historial Git

868d6abb7 2025 -> 2026
63081666f Encabezados de archivos fuente: 2024-> 2025.
0237d5eba Json: IdOnlySerializer y IdsOnlySerializer.
db2599ab8 Historial en libro de órdenes, facturas y proyectos.
c8f8ed935 Todas las entidades FetchType.LAZY.
b04a74ffb DisplayHistoryEntry: nuevo concepto.
0b32a3f37 Cosas de migración...
4c04cfd65 ¡CAMBIO MAYOR! IDs Integer a IDs Long.
f984352a0 JsonBackReference/JsonManagedReference: KostZuweisungDO
ca27394ef Constantes refactorizadas.
b78b870bd ShortDisplayNameCapable -> DisplayNameCapable.
8675a1dbe Entidades JPA Kotlin declaradas open (corrección de carga diferida)
1cf12f943 Kostzuweisung: Bucle infinito en serialización json corregido.
812b5b751 Gran WIP: refactorización de (Eingangs)Rechnung* asesino de rendimiento
339e017b4 @PropertyInfo soportado para métodos getter.
3bd2b6e9d RechnungRest: Agregar lista de posiciones
100cc30f0 KostZuweisungDO.java -> KostZuweisungDO.kt