private FinancialSituationAggregate(FinancialSituationBuilder builder) { Incomings incomings = new Incomings(builder.salary, builder.otherIncome); Outgoings outgoings = new Outgoings(builder.rent, builder.costOfLiving); this.rootEntity = new FinancialSituationRootEntity(builder.applicationNumber, incomings, outgoings); }
public FinancialSituationAggregate build() { return new FinancialSituationAggregate(this); } }
@Override public void save(FinancialSituationAggregate financialSituationAggregate) { FinancialSituationResultProjection projection = new FinancialSituationResultProjection(); projection.setApplicationNumber(financialSituationAggregate.rootEntity.applicationNumber.toString()); projection.setPoints(financialSituationAggregate.calculateScoringPoints()); dao.save(projection); }
private void scoreFinancialSituation(ApplicationNumber applicationNumber, FinancialSituation financialSituation) { FinancialSituationAggregate financialSituationAggregate = new FinancialSituationAggregate.FinancialSituationBuilder(applicationNumber) .costOfLiving(financialSituation.getCostOfLiving()) .otherIncome(financialSituation.getFurtherIncome()) .rent(financialSituation.getRent()) .salary(financialSituation.getSalary()) .build(); financialSituationResultRepository.save(financialSituationAggregate); }
public void performFinalScoring(ApplicationNumber applicationNumber) { FinancialSituationResultProjection financialSituationResultProjection = financialSituationResultRepository.retrieve(applicationNumber); ApplicantResultProjection applicantResultProjection = applicantResultRepository.retrieve(applicationNumber); AgencyResultProjection agencyResultProjection = agencyResultRepository.retrieve(new PersonId(applicantResultProjection.getPersonId())); if(financialSituationResultProjection != null && applicantResultProjection !=null && agencyResultProjection != null) { log.info("everything is complete for " + applicationNumber.toString()); ScoringResultAggregate scoringResultAggregate = new ScoringResultAggregate.Builder(applicationNumber) .noGoCriteria(agencyResultProjection.isNoGoPresent()) .agencyScoring(agencyResultProjection.getPoints()) .financialSituationScoring(financialSituationResultProjection.getPoints()) .applicantScoring(applicantResultProjection.getPoints()) .build(); scoringResultRepository.save(scoringResultAggregate); } else { log.info("NOT everything is complete for " + applicationNumber.toString()); } }
@Override public FinancialSituationResultProjection retrieve(ApplicationNumber applicationNumber) { return dao.findByApplicationNumber(applicationNumber.toString()); }
public int calculateScoringPoints() { Money monthlyBalance = rootEntity.sum(); if(monthlyBalance.isGreaterThan(new Money(2000))) { return 20; } else if(monthlyBalance.isGreaterThan(new Money(1000))) { return 15; } else if(monthlyBalance.isGreaterThan(new Money(750))) { return 10; } else if(monthlyBalance.isGreaterThan(new Money(500))) { return 5; } else if (monthlyBalance.isGreaterThan(new Money(250))) { return 2; } else if( monthlyBalance.isGreaterThan(new Money(0))) { return 0; } else { return -20; } }