AuftragsCacheTest.ktAnotaciones: Test, Autowired
Clases: AuftragsCacheTest
Super-tipo(s): AbstractTestBase
Funciones (1): assertValues
Propiedades (6): auftragDao, auftragsCache, rechnungDao, order, order, invoice
Importaciones: 6 paquetes
Paquete: org.projectforge.business.fibu
package org.projectforge.business.fibu
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.projectforge.commons.test.TestUtils.Companion.assertSame
import org.projectforge.business.test.AbstractTestBase
import org.springframework.beans.factory.annotation.Autowired
import java.time.LocalDate
class AuftragsCacheTest : AbstractTestBase() {
@Autowired
private lateinit var auftragDao: AuftragDao
@Autowired
private lateinit var auftragsCache: AuftragsCache
@Autowired
private lateinit var rechnungDao: RechnungDao
@Test
fun `test order workflow with invoices`() {
val order = AuftragDO().also {
it.addPosition(AuftragsPositionDO().also { pos ->
pos.titel = "Pos 1"
pos.nettoSumme = 100.toBigDecimal()
pos.status = AuftragsStatus.GELEGT
})
it.addPosition(AuftragsPositionDO().also { pos ->
pos.titel = "Pos 2"
pos.nettoSumme = 200.toBigDecimal()
pos.status = AuftragsStatus.GELEGT
})
it.addPosition(AuftragsPositionDO().also { pos ->
pos.titel = "Pos 3"
pos.nettoSumme = 400.toBigDecimal()
pos.status = AuftragsStatus.GELEGT
})
it.status = AuftragsStatus.GELEGT
it.nummer = auftragDao.nextNumber
}
auftragDao.insert(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).also { orderInfo ->
assertValues(orderInfo, akquiseSum = 700, netSum = 700)
}
order.status = AuftragsStatus.BEAUFTRAGT
order.positionen!!.find { it.titel == "Pos 1" }!!.status = AuftragsStatus.BEAUFTRAGT
order.positionen!!.find { it.titel == "Pos 2" }!!.status = AuftragsStatus.ABGELEHNT
order.positionen!!.find { it.titel == "Pos 3" }!!.status = AuftragsStatus.OPTIONAL
auftragDao.update(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).let { orderInfo ->
assertValues(orderInfo, akquiseSum = 400, netSum = 500, orderedNetSum = 100, notYetInvoicedSum = 100)
}
order.positionen!!.find { it.titel == "Pos 1" }!!.status = AuftragsStatus.ABGESCHLOSSEN
auftragDao.update(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).also { orderInfo ->
assertValues(
orderInfo, akquiseSum = 400, netSum = 500, orderedNetSum = 100,
toBeInvoicedSum = 100, notYetInvoicedSum = 100, toBeInvoiced = true
)
}
order.addPaymentSchedule(PaymentScheduleDO().also { schedule ->
schedule.amount = 50.toBigDecimal()
schedule.reached = true
})
auftragDao.update(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).also { orderInfo ->
// 100 para la posición a facturar y 50 por el calendario de pagos alcanzado que no está asignado a una posición.
assertValues(
orderInfo, akquiseSum = 400, netSum = 500, orderedNetSum = 100,
toBeInvoicedSum = 150, notYetInvoicedSum = 100, toBeInvoiced = true
)
}
order.addPaymentSchedule(PaymentScheduleDO().also { schedule ->
schedule.amount = 25.toBigDecimal()
schedule.reached = true
schedule.vollstaendigFakturiert = true
})
order.addPaymentSchedule(PaymentScheduleDO().also { schedule ->
schedule.amount = 80.toBigDecimal()
schedule.reached = true
schedule.positionNumber = order.positionen!!.find { it.titel == "Pos 1" }!!.number
})
auftragDao.update(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).also { orderInfo ->
// (25) se ignora (ya completamente facturado).
// 80 para la posición a facturar es "sobrescrito" por 80 del calendario de pagos.
// 50 por el calendario de pagos alcanzado que no está asignado a una posición.
assertValues(
orderInfo, akquiseSum = 400, netSum = 500, orderedNetSum = 100,
toBeInvoicedSum = 130, notYetInvoicedSum = 100, toBeInvoiced = true
)
}
}
@Test
fun `test order in akquisition with invoices`() {
val order = AuftragDO().also {
it.addPosition(AuftragsPositionDO().also { pos ->
pos.titel = "Pos 1"
pos.nettoSumme = 100.toBigDecimal()
pos.status = AuftragsStatus.GELEGT
})
it.addPosition(AuftragsPositionDO().also { pos ->
pos.titel = "Pos 2"
pos.nettoSumme = 200.toBigDecimal()
pos.status = AuftragsStatus.GELEGT
})
it.status = AuftragsStatus.GELEGT
it.nummer = auftragDao.nextNumber
}
auftragDao.insert(order, checkAccess = false)
auftragsCache.getOrderInfo(order.id).let { orderInfo ->
assertValues(orderInfo, akquiseSum = 300, netSum = 300)
}
val invoice = RechnungDO().also {
it.addPosition(RechnungsPositionDO().also { pos -> // 50 de 100
pos.auftragsPosition = order.positionen!!.get(0)
pos.menge = 5.toBigDecimal()
pos.einzelNetto = 10.toBigDecimal()
// ... (truncado, total 157 líneas)
868d6abb7 2025 -> 2026 63081666f Encabezados de archivos fuente: 2024-> 2025. 42dc9fa16 Pedidos: ordenado -> comisionado. 176cb32d7 WIP: Gradle ae2c04ee0 Trabajo de migración en curso... (todas las pruebas de todos los paquetes: OK).