this.em = em;
}
@Override
public PortfolioSummary findPortfolioSummary(Integer accountId) {
PortfolioSummary portfolioSummary = new PortfolioSummary();
Query query = em.createQuery("SELECT SUM(h.purchaseprice * h.quantity) as purchaseBasis, sum(q.price * h.quantity) as marketValue, count(h) FROM Holding h, Quote q Where h.accountAccountid =:accountId and h.quoteSymbol=q.symbol ORDER BY marketValue desc");
query.setParameter("accountId", accountId);
@SuppressWarnings("unchecked")
List<Object[]> result = query.getResultList();
for (Object[] o: result) {
BigDecimal price = (BigDecimal)o[0];
BigDecimal marketValue = (BigDecimal)o[1];
Long countOfHoldings = (Long)o[2];
portfolioSummary.setTotalBasis(price);
portfolioSummary.setTotalMarketValue(marketValue);
portfolioSummary.setNumberOfHoldings(countOfHoldings.intValue());
}
return portfolioSummary;
}