From 2aaf820bdcc010e240ad8ea53fe62b657b3d41e8 Mon Sep 17 00:00:00 2001 From: Jan Date: Sun, 19 Oct 2025 21:56:32 +0200 Subject: [PATCH] Bugfix: - taking the newest validity tuple, when fetching reports - risk and changes are only calculated for main run (and not all sections) --- .../rates/ValidityPeriodRepository.java | 42 ++++++++++--------- .../RouteSectionCostCalculationService.java | 7 +++- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/src/main/java/de/avatic/lcc/repositories/rates/ValidityPeriodRepository.java b/src/main/java/de/avatic/lcc/repositories/rates/ValidityPeriodRepository.java index f242545..f5271bb 100644 --- a/src/main/java/de/avatic/lcc/repositories/rates/ValidityPeriodRepository.java +++ b/src/main/java/de/avatic/lcc/repositories/rates/ValidityPeriodRepository.java @@ -257,27 +257,29 @@ public class ValidityPeriodRepository { } String validityPeriodSql = """ - SELECT - cj.validity_period_id, - cj.property_set_id - FROM - premise p - INNER JOIN - calculation_job cj ON p.id = cj.premise_id - WHERE - p.material_id = ? - """ + SELECT + cj.validity_period_id, + cj.property_set_id + FROM + premise p + INNER JOIN + calculation_job cj ON p.id = cj.premise_id + INNER JOIN + validity_period vp ON cj.validity_period_id = vp.id + INNER JOIN + property_set ps ON cj.property_set_id = ps.id + WHERE + p.material_id = ? + """ + whereClause + """ - - GROUP BY - cj.validity_period_id, - cj.property_set_id - HAVING - COUNT(DISTINCT COALESCE(p.supplier_node_id, p.user_supplier_node_id)) = ? - ORDER BY - (SELECT start_date FROM validity_period WHERE id = cj.validity_period_id) DESC - LIMIT 1 - """; + GROUP BY + cj.validity_period_id, + cj.property_set_id + HAVING + COUNT(DISTINCT COALESCE(p.supplier_node_id, p.user_supplier_node_id)) = ? + ORDER BY + ps.start_date DESC, vp.start_date DESC + """; // Build parameters array Object[] params = new Object[1 + totalNodeCount + 1]; diff --git a/src/main/java/de/avatic/lcc/service/calculation/execution/steps/RouteSectionCostCalculationService.java b/src/main/java/de/avatic/lcc/service/calculation/execution/steps/RouteSectionCostCalculationService.java index 2689238..786575e 100644 --- a/src/main/java/de/avatic/lcc/service/calculation/execution/steps/RouteSectionCostCalculationService.java +++ b/src/main/java/de/avatic/lcc/service/calculation/execution/steps/RouteSectionCostCalculationService.java @@ -176,9 +176,12 @@ public class RouteSectionCostCalculationService { var chanceRiskFactors = changeRiskFactorCalculationService.getChanceRiskFactors(setId, periodId); + var useRiskChange = (RateType.MATRIX != section.getRateType()) && (TransportType.RAIL == section.getTransportType() || TransportType.SEA == section.getTransportType()); + + BigDecimal annualCost = (containerCalculation.isWeightExceeded() ? prices.weightPrice.multiply(annualWeight) : prices.volumePrice.multiply(annualVolume)); - BigDecimal annualRiskCost = RateType.MATRIX != section.getRateType() ? annualCost.multiply(chanceRiskFactors.getRiskFactor()) : annualCost; - BigDecimal annualChanceCost = RateType.MATRIX != section.getRateType() ? annualCost.multiply(chanceRiskFactors.getChanceFactor()): annualCost; + BigDecimal annualRiskCost = useRiskChange ? annualCost.multiply(chanceRiskFactors.getRiskFactor()) : annualCost; + BigDecimal annualChanceCost = useRiskChange ? annualCost.multiply(chanceRiskFactors.getChanceFactor()): annualCost; result.setAnnualRiskCost(annualRiskCost); result.setAnnualChanceCost(annualChanceCost);