ProductSwitchResults switchResults = ProductSwitch.from(hausratVertrag).to(hausratKompakt2023);
Produktwechsel
Einleitung
Um den Produktwechsel an Vertragsobjektbäumen zu erleichtern gibt es die Hilfsklasse ProductSwitch
. Sie wird mit einem Wurzel-Vertragsobjekt und dem Ziel-Produkt aufgerufen, wechselt dort auf das übergebene Produkt und verfolgt rekursiv alle Beziehungen und wechselt dort auf die entsprechenden Produktbausteine:
Dabei liefert sie in ProductSwitchResults
das Ergebnis des Produktwechsels zurück. Daran kann abgefragt werden, ob der Wechsel erfolgreich war und welcher Vertragsteil auf welchen Produktbaustein umgestellt wurde:
if(!switchResults.containsFailures()) {
ProductSwitchResult grunddeckungSwitchResult = switchResults.getResultFor(hausratVertrag.getGrunddeckung());
if(grunddeckungSwitchResult.isSuccessful()) {
HausratGrunddeckungstyp neuerGrunddeckungstyp = grunddeckungSwitchResult.getNewProduct();
}
} else {
switchResults.failureAsMap().entrySet().forEach(
e -> System.out.println("Could not switch " + e.getKey() + " because " + e.getValue().getMessage())
);
}
Die Default-Implementierung wechselt genau dann, wenn
-
es genau ein gültiges Ziel gibt (Beispiel: Ein HausratVertrag ist bisher durch "HausratOptimal 2022-01" konfiguriert und enthält eine HausratGrunddeckung die bisher durch "HGD-Optimal 2022-01" konfiguriert ist. Der Produktwechsel wird zu "HausratKompakt 2023-01" durchgeführt, wo es nur genau einen Grunddeckungsbaustein gibt("HGD-Kompakt 2023-01") - deshalb wird die Grunddeckung auf genau diesen Baustein umgestellt.)
-
es genau ein gültiges Ziel mit der gleichen Kind-ID gibt (Beispiel: Ein HausratVertrag ist bisher durch "HausratOptimal 2022-01" konfiguriert und enthält eine Zusatzdeckung vom Typ "Fahrraddiebstahl 2022-01". Der Produktwechsel wird zu "HausratKompakt 2023-01" durchgeführt, wo es die Zusatzdeckungstypen "Überspannung 2023-01" und "Fahrraddiebstahl 2023-01" gibt - deshalb wird die Zusatzdeckung auf den "Fahrraddiebstahl"-Baustein in der Version "2023-01" umgestellt.)
Gibt es kein gültiges Ziel (An "HausratOptimal 2022-01" gibt es die Möglichkeit einen "Stammkundenrabatt 2022-01" zu vergeben, "HausratKompakt 2023-01" ist so knapp kalkuliert dass es dort gar keine Rabatte gibt oder "HausratPro 2023-01" enthält statt "Fahrraddiebstahl" die Deckungen "Standardfahrraddiebstahl" und "E-Bike-Diebstahl") wird ein FailedProductSwitch
gemeldet, da ein automatischer Wechsel auf das neue Produkt nicht möglich ist. Anhand der Ergebnisse könnten dann an den fehlgeschlagenen Kindbausteinen Entscheidungen getroffen und der Objektbaum geändert (Rabatt entfällt) oder auf dem jeweiligen Teilbaum ggf. ein neuer ProductSwitch (Ist das Fahrrad ein E-Bike? Dann ProductSwitch.from(fahrradDeckung).to(eBikeDeckungstyp)
) gestartet werden.