/**
   * Add Cash as a separate, automatic asset class that uses all the cash amounts from the
   * investment accounts.
   *
   * @param assetAllocation Main asset allocation object.
   */
  private void addCash(AssetClass assetAllocation) {
    // get all investment accounts, their currencies and cash balances.
    AccountRepository repo = new AccountRepository(getContext());
    AccountService accountService = new AccountService(getContext());
    List<String> investmentAccounts = new ArrayList<>();
    investmentAccounts.add(AccountTypes.INVESTMENT.toString());
    CurrencyService currencyService = new CurrencyService(getContext());
    int destinationCurrency = currencyService.getBaseCurrencyId();
    Money zero = MoneyFactory.fromDouble(0);

    List<Account> accounts = accountService.loadAccounts(false, false, investmentAccounts);

    Money sum = MoneyFactory.fromDouble(0);

    // Get the balances in base currency.
    for (Account account : accounts) {
      int sourceCurrency = account.getCurrencyId();
      Money amountInBase =
          currencyService.doCurrencyExchange(
              destinationCurrency, account.getInitialBalance(), sourceCurrency);
      sum = sum.add(amountInBase);
    }

    // add the cash asset class
    // todo: the allocation needs to be editable!
    AssetClass cash = AssetClass.create(getContext().getString(R.string.cash));
    cash.setType(ItemType.Cash);
    cash.setAllocation(zero);
    cash.setCurrentAllocation(zero);
    cash.setDifference(zero);
    cash.setValue(sum);

    assetAllocation.addChild(cash);
  }
  private Money sumStockValues(List<Stock> stocks) {
    Money sum = MoneyFactory.fromString("0");
    CurrencyService currencyService = new CurrencyService(getContext());
    AccountRepository repo = new AccountRepository(getContext());
    int baseCurrencyId = currencyService.getBaseCurrencyId();

    for (Stock stock : stocks) {
      // convert the stock value to the base currency.
      int accountId = stock.getHeldAt();
      int currencyId = repo.loadCurrencyIdFor(accountId);
      Money value =
          currencyService.doCurrencyExchange(baseCurrencyId, stock.getValue(), currencyId);

      sum = sum.add(value);
    }
    return sum;
  }