AuftragsCacheTest.ktAnnotations : Test, Autowired
Classes : AuftragsCacheTest
Supertype(s) : AbstractTestBase
Fonctions (1) : assertValues
Propriétés (6) : auftragDao, auftragsCache, rechnungDao, order, order, invoice
Importations : 6 paquetages
Paquetage : 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 du workflow de commande avec factures`() {
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 pour la position à facturer et 50 par échéance de paiement atteinte non attribuée à une position.
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) est ignoré (déjà entièrement facturé).
// 80 pour la position à facturer est "écrasé" par 80 de l'échéance de paiement.
// 50 par échéance de paiement atteinte non attribuée à une position.
assertValues(
orderInfo, akquiseSum = 400, netSum = 500, orderedNetSum = 100,
toBeInvoicedSum = 130, notYetInvoicedSum = 100, toBeInvoiced = true
)
}
}
@Test
fun `test de commande en acquisition avec factures`() {
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 sur 100
pos.auftragsPosition = order.positionen!!.get(0)
pos.menge = 5.toBigDecimal()
pos.einzelNetto = 10.toBigDecimal()
// ... (tronqué, total 157 lignes)
868d6abb7 2025 -> 2026 63081666f En-têtes des fichiers source : 2024 -> 2025. 42dc9fa16 Commandes : ordonné -> commissionné. 176cb32d7 WIP : Gradle ae2c04ee0 Migration en cours... (tous les tests de tous les paquetages : OK).