|
@@ -35,8 +35,7 @@ public class VergleichController {
|
|
|
@RequestHeader(value = "X-Kunde", required = false) String kundeHeader,
|
|
@RequestHeader(value = "X-Kunde", required = false) String kundeHeader,
|
|
|
Model model) {
|
|
Model model) {
|
|
|
|
|
|
|
|
- // Kunde aus Parameter oder Header ermitteln
|
|
|
|
|
- String activeKunde = kunde != null ? kunde : kundeHeader;
|
|
|
|
|
|
|
+ String activeKunde = resolveActiveKunde(kunde, kundeHeader);
|
|
|
|
|
|
|
|
model.addAttribute("validate", true);
|
|
model.addAttribute("validate", true);
|
|
|
model.addAttribute("schemaName", "haushalt-einkommen");
|
|
model.addAttribute("schemaName", "haushalt-einkommen");
|
|
@@ -58,8 +57,7 @@ public class VergleichController {
|
|
|
@RequestHeader(value = "X-Kunde", required = false) String kundeHeader,
|
|
@RequestHeader(value = "X-Kunde", required = false) String kundeHeader,
|
|
|
Model model) throws Exception {
|
|
Model model) throws Exception {
|
|
|
|
|
|
|
|
- // Kunde aus Parameter oder Header ermitteln
|
|
|
|
|
- String activeKunde = kunde != null ? kunde : kundeHeader;
|
|
|
|
|
|
|
+ String activeKunde = resolveActiveKunde(kunde, kundeHeader);
|
|
|
|
|
|
|
|
JsonNode left = om.readTree(leftJson);
|
|
JsonNode left = om.readTree(leftJson);
|
|
|
JsonNode right = om.readTree(rightJson);
|
|
JsonNode right = om.readTree(rightJson);
|
|
@@ -108,47 +106,12 @@ public class VergleichController {
|
|
|
if (personId == null && !personenRight.isEmpty()) personId = personenRight.get(0).id;
|
|
if (personId == null && !personenRight.isEmpty()) personId = personenRight.get(0).id;
|
|
|
|
|
|
|
|
// --- Personen-Tabelle (UNION via person.id) ---
|
|
// --- Personen-Tabelle (UNION via person.id) ---
|
|
|
- Map<String, Pair<JsonNode, JsonNode>> personenPairs = comparisonService.unionByKey(
|
|
|
|
|
- jsonNavigationService.personsArray(rightZeitraum),
|
|
|
|
|
- jsonNavigationService.personsArray(leftZeitraum),
|
|
|
|
|
- n -> n.path("person").path("id").asText()
|
|
|
|
|
- );
|
|
|
|
|
- List<MitgliedRow> mitgliederRows = personenPairs.entrySet().stream()
|
|
|
|
|
|
|
+ PersonComparisonContext context = createPersonComparisonContext(rightZeitraum, leftZeitraum, personId);
|
|
|
|
|
+ List<MitgliedRow> mitgliederRows = context.personenPairs.entrySet().stream()
|
|
|
.map(e -> dataExtractor.buildMitgliedRow(e.getKey(), e.getValue().right, e.getValue().left))
|
|
.map(e -> dataExtractor.buildMitgliedRow(e.getKey(), e.getValue().right, e.getValue().left))
|
|
|
.sorted(Comparator.comparing(MitgliedRow::personId))
|
|
.sorted(Comparator.comparing(MitgliedRow::personId))
|
|
|
.toList();
|
|
.toList();
|
|
|
|
|
|
|
|
- // --- Details für ausgewählte Person ---
|
|
|
|
|
- JsonNode rightPerson = personenPairs.getOrDefault(personId, new Pair<>(null, null)).right;
|
|
|
|
|
- JsonNode leftPerson = personenPairs.getOrDefault(personId, new Pair<>(null, null)).left;
|
|
|
|
|
-
|
|
|
|
|
- // Create personLabel from either right or left person data
|
|
|
|
|
- String personLabel = "(keine Person)";
|
|
|
|
|
- if (rightPerson != null) {
|
|
|
|
|
- personLabel = rightPerson.path("person").path("nachname").asText("") + ", " + rightPerson.path("person").path("vorname").asText("");
|
|
|
|
|
- } else if (leftPerson != null) {
|
|
|
|
|
- personLabel = leftPerson.path("person").path("nachname").asText("") + ", " + leftPerson.path("person").path("vorname").asText("");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // Create a comprehensive person name map that includes persons from both right AND left JSON
|
|
|
|
|
- Map<String, String> personNameByIdRight = new HashMap<>();
|
|
|
|
|
-
|
|
|
|
|
- // Add all persons from right (current) JSON
|
|
|
|
|
- personenRight.stream().forEach(p -> personNameByIdRight.put(p.id, p.label));
|
|
|
|
|
-
|
|
|
|
|
- // Add persons from left JSON that are not already in the map
|
|
|
|
|
- if (leftZeitraum != null) {
|
|
|
|
|
- List<PersonRef> personenLeft = jsonNavigationService.listRightPersons(leftZeitraum);
|
|
|
|
|
- personenLeft.stream()
|
|
|
|
|
- .filter(p -> !personNameByIdRight.containsKey(p.id))
|
|
|
|
|
- .forEach(p -> personNameByIdRight.put(p.id, p.label));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // Einkommen / Freibeträge / Kita: jeweils UNION per id
|
|
|
|
|
- List<EinkommenZeile> einkommenZeilen = dataExtractor.buildEinkommenZeilen(rightPerson, leftPerson);
|
|
|
|
|
- List<FreibetragZeile> freibetragZeilen = dataExtractor.buildFreibetragZeilen(rightPerson, leftPerson);
|
|
|
|
|
- List<KitaZeile> kitaZeilen = dataExtractor.buildKitaZeilen(rightPerson, leftPerson, personNameByIdRight);
|
|
|
|
|
-
|
|
|
|
|
// --- Model füllen & rendern ---
|
|
// --- Model füllen & rendern ---
|
|
|
model.addAttribute("leftJson", leftJson);
|
|
model.addAttribute("leftJson", leftJson);
|
|
|
model.addAttribute("rightJson", rightJson);
|
|
model.addAttribute("rightJson", rightJson);
|
|
@@ -165,10 +128,10 @@ public class VergleichController {
|
|
|
model.addAttribute("personenRight", personenRight);
|
|
model.addAttribute("personenRight", personenRight);
|
|
|
model.addAttribute("personId", personId);
|
|
model.addAttribute("personId", personId);
|
|
|
model.addAttribute("mitgliederRows", mitgliederRows);
|
|
model.addAttribute("mitgliederRows", mitgliederRows);
|
|
|
- model.addAttribute("personLabel", personLabel);
|
|
|
|
|
- model.addAttribute("einkommenZeilen", einkommenZeilen);
|
|
|
|
|
- model.addAttribute("freibetragZeilen", freibetragZeilen);
|
|
|
|
|
- model.addAttribute("kitaZeilen", kitaZeilen);
|
|
|
|
|
|
|
+ model.addAttribute("personLabel", context.personLabel);
|
|
|
|
|
+ model.addAttribute("einkommenZeilen", context.einkommenZeilen);
|
|
|
|
|
+ model.addAttribute("freibetragZeilen", context.freibetragZeilen);
|
|
|
|
|
+ model.addAttribute("kitaZeilen", context.kitaZeilen);
|
|
|
model.addAttribute("activeKunde", activeKunde);
|
|
model.addAttribute("activeKunde", activeKunde);
|
|
|
return "vergleich";
|
|
return "vergleich";
|
|
|
}
|
|
}
|
|
@@ -186,62 +149,20 @@ public class VergleichController {
|
|
|
JsonNode left = om.readTree(leftJson);
|
|
JsonNode left = om.readTree(leftJson);
|
|
|
JsonNode right = om.readTree(rightJson);
|
|
JsonNode right = om.readTree(rightJson);
|
|
|
|
|
|
|
|
- // --- Rechts (Master) Zeitraum wählen ---
|
|
|
|
|
JsonNode rightZeitraum = jsonNavigationService.findZeitraumById(right, rightZeitraumId);
|
|
JsonNode rightZeitraum = jsonNavigationService.findZeitraumById(right, rightZeitraumId);
|
|
|
-
|
|
|
|
|
- // --- Links (Baseline) Zeitraum finden ---
|
|
|
|
|
JsonNode leftZeitraum = null;
|
|
JsonNode leftZeitraum = null;
|
|
|
if (leftZeitraumId != null) {
|
|
if (leftZeitraumId != null) {
|
|
|
leftZeitraum = jsonNavigationService.findZeitraumById(jsonNavigationService.getRootOfVorgang(left, leftVorgangId), leftZeitraumId);
|
|
leftZeitraum = jsonNavigationService.findZeitraumById(jsonNavigationService.getRootOfVorgang(left, leftVorgangId), leftZeitraumId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // --- Personenliste rechts ---
|
|
|
|
|
- List<PersonRef> personenRight = jsonNavigationService.listRightPersons(rightZeitraum);
|
|
|
|
|
-
|
|
|
|
|
- // --- Personen-Tabelle (UNION via person.id) ---
|
|
|
|
|
- Map<String, Pair<JsonNode, JsonNode>> personenPairs = comparisonService.unionByKey(
|
|
|
|
|
- jsonNavigationService.personsArray(rightZeitraum),
|
|
|
|
|
- jsonNavigationService.personsArray(leftZeitraum),
|
|
|
|
|
- n -> n.path("person").path("id").asText()
|
|
|
|
|
- );
|
|
|
|
|
-
|
|
|
|
|
- // --- Details für ausgewählte Person ---
|
|
|
|
|
- JsonNode rightPerson = personenPairs.getOrDefault(personId, new Pair<>(null, null)).right;
|
|
|
|
|
- JsonNode leftPerson = personenPairs.getOrDefault(personId, new Pair<>(null, null)).left;
|
|
|
|
|
-
|
|
|
|
|
- // Create personLabel from either right or left person data
|
|
|
|
|
- String personLabel = "(keine Person)";
|
|
|
|
|
- if (rightPerson != null) {
|
|
|
|
|
- personLabel = rightPerson.path("person").path("nachname").asText("") + ", " + rightPerson.path("person").path("vorname").asText("");
|
|
|
|
|
- } else if (leftPerson != null) {
|
|
|
|
|
- personLabel = leftPerson.path("person").path("nachname").asText("") + ", " + leftPerson.path("person").path("vorname").asText("");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // Create a comprehensive person name map that includes persons from both right AND left JSON
|
|
|
|
|
- Map<String, String> personNameByIdRight = new HashMap<>();
|
|
|
|
|
-
|
|
|
|
|
- // Add all persons from right (current) JSON
|
|
|
|
|
- personenRight.stream().forEach(p -> personNameByIdRight.put(p.id, p.label));
|
|
|
|
|
-
|
|
|
|
|
- // Add persons from left JSON that are not already in the map
|
|
|
|
|
- if (leftZeitraum != null) {
|
|
|
|
|
- List<PersonRef> personenLeft = jsonNavigationService.listRightPersons(leftZeitraum);
|
|
|
|
|
- personenLeft.stream()
|
|
|
|
|
- .filter(p -> !personNameByIdRight.containsKey(p.id))
|
|
|
|
|
- .forEach(p -> personNameByIdRight.put(p.id, p.label));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // Einkommen / Freibeträge / Kita: jeweils UNION per id
|
|
|
|
|
- List<EinkommenZeile> einkommenZeilen = dataExtractor.buildEinkommenZeilen(rightPerson, leftPerson);
|
|
|
|
|
- List<FreibetragZeile> freibetragZeilen = dataExtractor.buildFreibetragZeilen(rightPerson, leftPerson);
|
|
|
|
|
- List<KitaZeile> kitaZeilen = dataExtractor.buildKitaZeilen(rightPerson, leftPerson, personNameByIdRight);
|
|
|
|
|
|
|
+ PersonComparisonContext context = createPersonComparisonContext(rightZeitraum, leftZeitraum, personId);
|
|
|
|
|
|
|
|
PersonDetailsResponse response = new PersonDetailsResponse(
|
|
PersonDetailsResponse response = new PersonDetailsResponse(
|
|
|
personId,
|
|
personId,
|
|
|
- personLabel,
|
|
|
|
|
- einkommenZeilen,
|
|
|
|
|
- freibetragZeilen,
|
|
|
|
|
- kitaZeilen
|
|
|
|
|
|
|
+ context.personLabel,
|
|
|
|
|
+ context.einkommenZeilen,
|
|
|
|
|
+ context.freibetragZeilen,
|
|
|
|
|
+ context.kitaZeilen
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
return ResponseEntity.ok(response);
|
|
return ResponseEntity.ok(response);
|
|
@@ -272,67 +193,28 @@ public class VergleichController {
|
|
|
// Ersten Zeitraum des neuen Vorgangs als Default wählen
|
|
// Ersten Zeitraum des neuen Vorgangs als Default wählen
|
|
|
String newLeftZeitraumId = !leftZ.isEmpty() ? leftZ.get(0).id : null;
|
|
String newLeftZeitraumId = !leftZ.isEmpty() ? leftZ.get(0).id : null;
|
|
|
|
|
|
|
|
- // --- Rechts (Master) Zeitraum ---
|
|
|
|
|
JsonNode rightZeitraum = jsonNavigationService.findZeitraumById(right, rightZeitraumId);
|
|
JsonNode rightZeitraum = jsonNavigationService.findZeitraumById(right, rightZeitraumId);
|
|
|
-
|
|
|
|
|
- // --- Links (Baseline) Zeitraum ---
|
|
|
|
|
JsonNode leftZeitraum = null;
|
|
JsonNode leftZeitraum = null;
|
|
|
if (newLeftZeitraumId != null) {
|
|
if (newLeftZeitraumId != null) {
|
|
|
leftZeitraum = jsonNavigationService.findZeitraumById(jsonNavigationService.getRootOfVorgang(left, newLeftVorgangId), newLeftZeitraumId);
|
|
leftZeitraum = jsonNavigationService.findZeitraumById(jsonNavigationService.getRootOfVorgang(left, newLeftVorgangId), newLeftZeitraumId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // --- Personen-Tabelle neu berechnen ---
|
|
|
|
|
- Map<String, Pair<JsonNode, JsonNode>> personenPairs = comparisonService.unionByKey(
|
|
|
|
|
- jsonNavigationService.personsArray(rightZeitraum),
|
|
|
|
|
- jsonNavigationService.personsArray(leftZeitraum),
|
|
|
|
|
- n -> n.path("person").path("id").asText()
|
|
|
|
|
- );
|
|
|
|
|
- List<MitgliedRow> mitgliederRows = personenPairs.entrySet().stream()
|
|
|
|
|
|
|
+ PersonComparisonContext context = createPersonComparisonContext(rightZeitraum, leftZeitraum, personId);
|
|
|
|
|
+ List<MitgliedRow> mitgliederRows = context.personenPairs.entrySet().stream()
|
|
|
.map(e -> dataExtractor.buildMitgliedRow(e.getKey(), e.getValue().right, e.getValue().left))
|
|
.map(e -> dataExtractor.buildMitgliedRow(e.getKey(), e.getValue().right, e.getValue().left))
|
|
|
.sorted(Comparator.comparing(MitgliedRow::personId))
|
|
.sorted(Comparator.comparing(MitgliedRow::personId))
|
|
|
.toList();
|
|
.toList();
|
|
|
|
|
|
|
|
- // --- Details für ausgewählte Person ---
|
|
|
|
|
- List<PersonRef> personenRight = jsonNavigationService.listRightPersons(rightZeitraum);
|
|
|
|
|
- JsonNode rightPerson = personenPairs.getOrDefault(personId, new Pair<>(null, null)).right;
|
|
|
|
|
- JsonNode leftPerson = personenPairs.getOrDefault(personId, new Pair<>(null, null)).left;
|
|
|
|
|
-
|
|
|
|
|
- // Create personLabel from either right or left person data
|
|
|
|
|
- String personLabel = "(keine Person)";
|
|
|
|
|
- if (rightPerson != null) {
|
|
|
|
|
- personLabel = rightPerson.path("person").path("nachname").asText("") + ", " + rightPerson.path("person").path("vorname").asText("");
|
|
|
|
|
- } else if (leftPerson != null) {
|
|
|
|
|
- personLabel = leftPerson.path("person").path("nachname").asText("") + ", " + leftPerson.path("person").path("vorname").asText("");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // Create a comprehensive person name map that includes persons from both right AND left JSON
|
|
|
|
|
- Map<String, String> personNameByIdRight = new HashMap<>();
|
|
|
|
|
-
|
|
|
|
|
- // Add all persons from right (current) JSON
|
|
|
|
|
- personenRight.stream().forEach(p -> personNameByIdRight.put(p.id, p.label));
|
|
|
|
|
-
|
|
|
|
|
- // Add persons from left JSON that are not already in the map
|
|
|
|
|
- if (leftZeitraum != null) {
|
|
|
|
|
- List<PersonRef> personenLeft = jsonNavigationService.listRightPersons(leftZeitraum);
|
|
|
|
|
- personenLeft.stream()
|
|
|
|
|
- .filter(p -> !personNameByIdRight.containsKey(p.id))
|
|
|
|
|
- .forEach(p -> personNameByIdRight.put(p.id, p.label));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- List<EinkommenZeile> einkommenZeilen = dataExtractor.buildEinkommenZeilen(rightPerson, leftPerson);
|
|
|
|
|
- List<FreibetragZeile> freibetragZeilen = dataExtractor.buildFreibetragZeilen(rightPerson, leftPerson);
|
|
|
|
|
- List<KitaZeile> kitaZeilen = dataExtractor.buildKitaZeilen(rightPerson, leftPerson, personNameByIdRight);
|
|
|
|
|
-
|
|
|
|
|
VorgangChangeResponse response = new VorgangChangeResponse(
|
|
VorgangChangeResponse response = new VorgangChangeResponse(
|
|
|
newLeftVorgangId,
|
|
newLeftVorgangId,
|
|
|
newLeftZeitraumId,
|
|
newLeftZeitraumId,
|
|
|
leftZ,
|
|
leftZ,
|
|
|
mitgliederRows,
|
|
mitgliederRows,
|
|
|
personId,
|
|
personId,
|
|
|
- personLabel,
|
|
|
|
|
- einkommenZeilen,
|
|
|
|
|
- freibetragZeilen,
|
|
|
|
|
- kitaZeilen
|
|
|
|
|
|
|
+ context.personLabel,
|
|
|
|
|
+ context.einkommenZeilen,
|
|
|
|
|
+ context.freibetragZeilen,
|
|
|
|
|
+ context.kitaZeilen
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
return ResponseEntity.ok(response);
|
|
return ResponseEntity.ok(response);
|
|
@@ -351,71 +233,101 @@ public class VergleichController {
|
|
|
JsonNode left = om.readTree(leftJson);
|
|
JsonNode left = om.readTree(leftJson);
|
|
|
JsonNode right = om.readTree(rightJson);
|
|
JsonNode right = om.readTree(rightJson);
|
|
|
|
|
|
|
|
- // --- Rechts (Master) Zeitraum ---
|
|
|
|
|
JsonNode rightZeitraum = jsonNavigationService.findZeitraumById(right, rightZeitraumId);
|
|
JsonNode rightZeitraum = jsonNavigationService.findZeitraumById(right, rightZeitraumId);
|
|
|
-
|
|
|
|
|
- // --- Links (Baseline) Zeitraum ---
|
|
|
|
|
JsonNode leftZeitraum = null;
|
|
JsonNode leftZeitraum = null;
|
|
|
if (newLeftZeitraumId != null) {
|
|
if (newLeftZeitraumId != null) {
|
|
|
leftZeitraum = jsonNavigationService.findZeitraumById(jsonNavigationService.getRootOfVorgang(left, leftVorgangId), newLeftZeitraumId);
|
|
leftZeitraum = jsonNavigationService.findZeitraumById(jsonNavigationService.getRootOfVorgang(left, leftVorgangId), newLeftZeitraumId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // --- Personen-Tabelle neu berechnen ---
|
|
|
|
|
|
|
+ PersonComparisonContext context = createPersonComparisonContext(rightZeitraum, leftZeitraum, personId);
|
|
|
|
|
+ List<MitgliedRow> mitgliederRows = context.personenPairs.entrySet().stream()
|
|
|
|
|
+ .map(e -> dataExtractor.buildMitgliedRow(e.getKey(), e.getValue().right, e.getValue().left))
|
|
|
|
|
+ .sorted(Comparator.comparing(MitgliedRow::personId))
|
|
|
|
|
+ .toList();
|
|
|
|
|
+
|
|
|
|
|
+ ZeitraumChangeResponse response = new ZeitraumChangeResponse(
|
|
|
|
|
+ newLeftZeitraumId,
|
|
|
|
|
+ mitgliederRows,
|
|
|
|
|
+ personId,
|
|
|
|
|
+ context.personLabel,
|
|
|
|
|
+ context.einkommenZeilen,
|
|
|
|
|
+ context.freibetragZeilen,
|
|
|
|
|
+ context.kitaZeilen
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ return ResponseEntity.ok(response);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ===== Private Helper Methods =====
|
|
|
|
|
+
|
|
|
|
|
+ private String resolveActiveKunde(String kunde, String kundeHeader) {
|
|
|
|
|
+ return kunde != null ? kunde : kundeHeader;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private PersonComparisonContext createPersonComparisonContext(JsonNode rightZeitraum, JsonNode leftZeitraum, String personId) {
|
|
|
|
|
+ // Personen-Tabelle (UNION via person.id)
|
|
|
Map<String, Pair<JsonNode, JsonNode>> personenPairs = comparisonService.unionByKey(
|
|
Map<String, Pair<JsonNode, JsonNode>> personenPairs = comparisonService.unionByKey(
|
|
|
jsonNavigationService.personsArray(rightZeitraum),
|
|
jsonNavigationService.personsArray(rightZeitraum),
|
|
|
jsonNavigationService.personsArray(leftZeitraum),
|
|
jsonNavigationService.personsArray(leftZeitraum),
|
|
|
n -> n.path("person").path("id").asText()
|
|
n -> n.path("person").path("id").asText()
|
|
|
);
|
|
);
|
|
|
- List<MitgliedRow> mitgliederRows = personenPairs.entrySet().stream()
|
|
|
|
|
- .map(e -> dataExtractor.buildMitgliedRow(e.getKey(), e.getValue().right, e.getValue().left))
|
|
|
|
|
- .sorted(Comparator.comparing(MitgliedRow::personId))
|
|
|
|
|
- .toList();
|
|
|
|
|
|
|
|
|
|
- // --- Details für ausgewählte Person ---
|
|
|
|
|
- List<PersonRef> personenRight = jsonNavigationService.listRightPersons(rightZeitraum);
|
|
|
|
|
|
|
+ // Details für ausgewählte Person
|
|
|
JsonNode rightPerson = personenPairs.getOrDefault(personId, new Pair<>(null, null)).right;
|
|
JsonNode rightPerson = personenPairs.getOrDefault(personId, new Pair<>(null, null)).right;
|
|
|
JsonNode leftPerson = personenPairs.getOrDefault(personId, new Pair<>(null, null)).left;
|
|
JsonNode leftPerson = personenPairs.getOrDefault(personId, new Pair<>(null, null)).left;
|
|
|
|
|
|
|
|
- // Create personLabel from either right or left person data
|
|
|
|
|
- String personLabel = "(keine Person)";
|
|
|
|
|
|
|
+ String personLabel = createPersonLabel(rightPerson, leftPerson);
|
|
|
|
|
+ Map<String, String> personNameById = createPersonNameMap(rightZeitraum, leftZeitraum);
|
|
|
|
|
+
|
|
|
|
|
+ // Einkommen / Freibeträge / Kita: jeweils UNION per id
|
|
|
|
|
+ List<EinkommenZeile> einkommenZeilen = dataExtractor.buildEinkommenZeilen(rightPerson, leftPerson);
|
|
|
|
|
+ List<FreibetragZeile> freibetragZeilen = dataExtractor.buildFreibetragZeilen(rightPerson, leftPerson);
|
|
|
|
|
+ List<KitaZeile> kitaZeilen = dataExtractor.buildKitaZeilen(rightPerson, leftPerson, personNameById);
|
|
|
|
|
+
|
|
|
|
|
+ return new PersonComparisonContext(personenPairs, personLabel, einkommenZeilen, freibetragZeilen, kitaZeilen);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private String createPersonLabel(JsonNode rightPerson, JsonNode leftPerson) {
|
|
|
if (rightPerson != null) {
|
|
if (rightPerson != null) {
|
|
|
- personLabel = rightPerson.path("person").path("nachname").asText("") + ", " + rightPerson.path("person").path("vorname").asText("");
|
|
|
|
|
|
|
+ return rightPerson.path("person").path("nachname").asText("") + ", " +
|
|
|
|
|
+ rightPerson.path("person").path("vorname").asText("");
|
|
|
} else if (leftPerson != null) {
|
|
} else if (leftPerson != null) {
|
|
|
- personLabel = leftPerson.path("person").path("nachname").asText("") + ", " + leftPerson.path("person").path("vorname").asText("");
|
|
|
|
|
|
|
+ return leftPerson.path("person").path("nachname").asText("") + ", " +
|
|
|
|
|
+ leftPerson.path("person").path("vorname").asText("");
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // Create a comprehensive person name map that includes persons from both right AND left JSON
|
|
|
|
|
- Map<String, String> personNameByIdRight = new HashMap<>();
|
|
|
|
|
|
|
+ return "(keine Person)";
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private Map<String, String> createPersonNameMap(JsonNode rightZeitraum, JsonNode leftZeitraum) {
|
|
|
|
|
+ Map<String, String> personNameById = new HashMap<>();
|
|
|
|
|
|
|
|
// Add all persons from right (current) JSON
|
|
// Add all persons from right (current) JSON
|
|
|
- personenRight.stream().forEach(p -> personNameByIdRight.put(p.id, p.label));
|
|
|
|
|
|
|
+ List<PersonRef> personenRight = jsonNavigationService.listRightPersons(rightZeitraum);
|
|
|
|
|
+ personenRight.forEach(p -> personNameById.put(p.id, p.label));
|
|
|
|
|
|
|
|
// Add persons from left JSON that are not already in the map
|
|
// Add persons from left JSON that are not already in the map
|
|
|
if (leftZeitraum != null) {
|
|
if (leftZeitraum != null) {
|
|
|
List<PersonRef> personenLeft = jsonNavigationService.listRightPersons(leftZeitraum);
|
|
List<PersonRef> personenLeft = jsonNavigationService.listRightPersons(leftZeitraum);
|
|
|
personenLeft.stream()
|
|
personenLeft.stream()
|
|
|
- .filter(p -> !personNameByIdRight.containsKey(p.id))
|
|
|
|
|
- .forEach(p -> personNameByIdRight.put(p.id, p.label));
|
|
|
|
|
|
|
+ .filter(p -> !personNameById.containsKey(p.id))
|
|
|
|
|
+ .forEach(p -> personNameById.put(p.id, p.label));
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- List<EinkommenZeile> einkommenZeilen = dataExtractor.buildEinkommenZeilen(rightPerson, leftPerson);
|
|
|
|
|
- List<FreibetragZeile> freibetragZeilen = dataExtractor.buildFreibetragZeilen(rightPerson, leftPerson);
|
|
|
|
|
- List<KitaZeile> kitaZeilen = dataExtractor.buildKitaZeilen(rightPerson, leftPerson, personNameByIdRight);
|
|
|
|
|
-
|
|
|
|
|
- ZeitraumChangeResponse response = new ZeitraumChangeResponse(
|
|
|
|
|
- newLeftZeitraumId,
|
|
|
|
|
- mitgliederRows,
|
|
|
|
|
- personId,
|
|
|
|
|
- personLabel,
|
|
|
|
|
- einkommenZeilen,
|
|
|
|
|
- freibetragZeilen,
|
|
|
|
|
- kitaZeilen
|
|
|
|
|
- );
|
|
|
|
|
-
|
|
|
|
|
- return ResponseEntity.ok(response);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ return personNameById;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // ===== Helper-Typen =====
|
|
|
|
|
|
|
+ // ===== Helper Classes =====
|
|
|
|
|
+
|
|
|
|
|
+ private record PersonComparisonContext(
|
|
|
|
|
+ Map<String, Pair<JsonNode, JsonNode>> personenPairs,
|
|
|
|
|
+ String personLabel,
|
|
|
|
|
+ List<EinkommenZeile> einkommenZeilen,
|
|
|
|
|
+ List<FreibetragZeile> freibetragZeilen,
|
|
|
|
|
+ List<KitaZeile> kitaZeilen
|
|
|
|
|
+ ) {}
|
|
|
|
|
+
|
|
|
|
|
+ // ===== Public Records =====
|
|
|
|
|
+
|
|
|
public record Z(String id, String beginn, String ende) {}
|
|
public record Z(String id, String beginn, String ende) {}
|
|
|
public record Vorgang(String id, String vorgangstyp, List<Z> zeitraeume) {}
|
|
public record Vorgang(String id, String vorgangstyp, List<Z> zeitraeume) {}
|
|
|
public record PersonRef(String id, String label) {}
|
|
public record PersonRef(String id, String label) {}
|
|
@@ -424,6 +336,7 @@ public class VergleichController {
|
|
|
public record PersonDetailsResponse(String personId, String personLabel, List<EinkommenZeile> einkommenZeilen, List<FreibetragZeile> freibetragZeilen, List<KitaZeile> kitaZeilen) {}
|
|
public record PersonDetailsResponse(String personId, String personLabel, List<EinkommenZeile> einkommenZeilen, List<FreibetragZeile> freibetragZeilen, List<KitaZeile> kitaZeilen) {}
|
|
|
public record VorgangChangeResponse(String leftVorgangId, String leftZeitraumId, List<Z> leftZeitraeume, List<MitgliedRow> mitgliederRows, String personId, String personLabel, List<EinkommenZeile> einkommenZeilen, List<FreibetragZeile> freibetragZeilen, List<KitaZeile> kitaZeilen) {}
|
|
public record VorgangChangeResponse(String leftVorgangId, String leftZeitraumId, List<Z> leftZeitraeume, List<MitgliedRow> mitgliederRows, String personId, String personLabel, List<EinkommenZeile> einkommenZeilen, List<FreibetragZeile> freibetragZeilen, List<KitaZeile> kitaZeilen) {}
|
|
|
public record ZeitraumChangeResponse(String leftZeitraumId, List<MitgliedRow> mitgliederRows, String personId, String personLabel, List<EinkommenZeile> einkommenZeilen, List<FreibetragZeile> freibetragZeilen, List<KitaZeile> kitaZeilen) {}
|
|
public record ZeitraumChangeResponse(String leftZeitraumId, List<MitgliedRow> mitgliederRows, String personId, String personLabel, List<EinkommenZeile> einkommenZeilen, List<FreibetragZeile> freibetragZeilen, List<KitaZeile> kitaZeilen) {}
|
|
|
|
|
+
|
|
|
public static final class Pair<R, L> {
|
|
public static final class Pair<R, L> {
|
|
|
public final R right;
|
|
public final R right;
|
|
|
public final L left;
|
|
public final L left;
|