public BigDecimal getUserContributionPrice(Resource resource, User user, ZECurrency currency) {
if(user == null) {
return null;
}
ResourceTender userTender = getUserTender(resource, user.getId());
if(userTender == null || userTender.getAcceptDate() == null ||
userTender.getAmount().compareTo(BigDecimal.ZERO) <= 0) {
return BigDecimal.ZERO;
}
BigDecimal partnersContributionPrice = BigDecimal.ZERO;
BigDecimal potentialUserContributionPrice = BigDecimal.ZERO;
if (userTender instanceof Supply) {
potentialUserContributionPrice = ((Supply) userTender).getTotalPrice();
Set<Need> needs = resource.getNeeds();
for(Need need: needs) {
if (need.getAcceptDate() != null &&
need.getAmount().compareTo(BigDecimal.ZERO) > 0) {
partnersContributionPrice = partnersContributionPrice.add(potentialUserContributionPrice.
divide(userTender.getAmount(), RoundingMode.HALF_UP).
multiply(need.getAmount()));
}
}
} else if(userTender instanceof Need) {
Set<Supply> supplies = resource.getSupplies();
for(Supply supply: supplies) {
if (supply.getAcceptDate() != null &&
supply.getAmount().compareTo(BigDecimal.ZERO) > 0) {
BigDecimal supplyPrice = supply.getTotalPrice();
partnersContributionPrice = partnersContributionPrice.add(supplyPrice);
potentialUserContributionPrice = potentialUserContributionPrice.add(
supplyPrice.
divide(supply.getAmount(), RoundingMode.HALF_UP).
multiply(userTender.getAmount()));
}
}
}
BigDecimal userContributionPrice;
if(potentialUserContributionPrice.compareTo(partnersContributionPrice) > 0) {