@Override public String toString() { return "Wrapper for loan #" + participation.getLoanId() + ", participation #" + participation.getId(); } }
@Override public String toString() { return "Wrapper for loan #" + participation.getLoanId() + ", participation #" + participation.getId(); } }
private static ParticipationDescriptor toDescriptor(final Participation p, final Tenant tenant) { return new ParticipationDescriptor(p, () -> tenant.getLoan(p.getLoanId())); }
private static ParticipationDescriptor toDescriptor(final Participation p, final Tenant tenant) { return new ParticipationDescriptor(p, () -> LoanCache.get().getLoan(p.getLoanId(), tenant)); }
public void purchase(final Participation participation) { LOGGER.debug("Purchasing participation #{} in loan #{}.", participation.getId(), participation.getLoanId()); controlApi.run(api -> api.purchase(participation.getId(), new PurchaseRequest(participation))); }
boolean sizeMatchesStrategy(final Participation participation, final BigDecimal balance) { final int id = participation.getLoanId(); final long participationId = participation.getId(); final int[] recommended = getRecommendationBoundaries(participation); final int minimumRecommendation = recommended[0]; final int maximumRecommendation = recommended[1]; Decisions.report(logger -> logger.trace("Loan #{} (participation #{}) recommended range <{}; {}> CZK.", id, participationId, minimumRecommendation, maximumRecommendation)); // round to nearest lower increment final double price = participation.getRemainingPrincipal().doubleValue(); if (balance.doubleValue() < price) { Decisions.report(logger -> logger.debug("Loan #{} (participation #{}) not recommended; over balance.", id, participationId)); } else if (minimumRecommendation > price) { Decisions.report(logger -> logger.debug("Loan #{} (participation #{}) not recommended; below minimum.", id, participationId)); } else if (price > maximumRecommendation) { Decisions.report(logger -> logger.debug("Loan #{} (participation #{}) not recommended; over maximum.", id, participationId)); } else { Decisions.report(logger -> logger.debug("Final recommendation: buy loan #{} (participation #{}).", id, participationId)); return true; } return false; }
public void purchase(final Participation participation) { LOGGER.debug("Purchasing participation #{} in loan #{}.", participation.getId(), participation.getLoanId()); controlApi.run(api -> api.purchase(participation.getId(), new PurchaseRequest(participation))); }
boolean sizeMatchesStrategy(final Participation participation, final BigDecimal balance) { final int id = participation.getLoanId(); final long participationId = participation.getId(); final int[] recommended = getRecommendationBoundaries(participation); final int minimumRecommendation = recommended[0]; final int maximumRecommendation = recommended[1]; Decisions.report(logger -> logger.trace("Loan #{} (participation #{}) recommended range <{}; {}> CZK.", id, participationId, minimumRecommendation, maximumRecommendation)); // round to nearest lower increment final double price = participation.getRemainingPrincipal().doubleValue(); if (balance.doubleValue() < price) { Decisions.report(logger -> logger.debug("Loan #{} (participation #{}) not recommended; over balance.", id, participationId)); } else if (minimumRecommendation > price) { Decisions.report(logger -> logger.debug("Loan #{} (participation #{}) not recommended; below minimum.", id, participationId)); } else if (price > maximumRecommendation) { Decisions.report(logger -> logger.debug("Loan #{} (participation #{}) not recommended; over maximum.", id, participationId)); } else { Decisions.report(logger -> logger.debug("Final recommendation: buy loan #{} (participation #{}).", id, participationId)); return true; } return false; }
private Stream<ParticipationDescriptor> readMarketplace() { final long balance = tenant.getPortfolio().getBalance().longValue(); final Select s = new Select() .lessThanOrEquals("remainingPrincipal", balance) .equalsPlain("willNotExceedLoanInvestmentLimit", "true"); final SoldParticipationCache cache = SoldParticipationCache.forTenant(tenant); return tenant.call(zonky -> zonky.getAvailableParticipations(s)) .filter(p -> { // never re-purchase what was once sold final int loanId = p.getLoanId(); final boolean wasSoldBefore = cache.wasOnceSold(loanId); LOGGER.debug("Loan #{} already sold before, ignoring: {}.", loanId, wasSoldBefore); return !wasSoldBefore; }) .map(p -> toDescriptor(p, tenant)); }
@Override public Stream<ParticipationDescriptor> readMarketplace(final Tenant tenant) { final long balance = tenant.getPortfolio().getBalance().longValue(); final Select s = new Select() .lessThanOrEquals("remainingPrincipal", balance) .equalsPlain("willNotExceedLoanInvestmentLimit", "true"); final SoldParticipationCache cache = SoldParticipationCache.forTenant(tenant); return tenant.call(zonky -> zonky.getAvailableParticipations(s)) .filter(p -> { // never re-purchase what was once sold final int loanId = p.getLoanId(); final boolean wasSoldBefore = cache.wasOnceSold(loanId); LOGGER.debug("Loan #{} already sold before, ignoring: {}.", loanId, wasSoldBefore); return !wasSoldBefore; }) .map(p -> toDescriptor(p, tenant)); }