/** * 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 void initBaseCurrency(SQLiteDatabase db) { Cursor currencyCursor; // currencies try { CurrencyService currencyService = new CurrencyService(getContext()); Currency systemCurrency = currencyService.getSystemDefaultCurrency(); if (systemCurrency == null) return; InfoService infoService = new InfoService(getContext()); currencyCursor = db.rawQuery( "SELECT * FROM " + infoService.repository.getSource() + " WHERE " + Info.INFONAME + "=?", new String[] {InfoKeys.BASECURRENCYID}); if (currencyCursor == null) return; boolean recordExists = currencyCursor.moveToFirst(); int recordId = currencyCursor.getInt(currencyCursor.getColumnIndex(Info.INFOID)); currencyCursor.close(); // Use the system default currency. int currencyId = currencyService.loadCurrencyIdFromSymbolRaw(db, systemCurrency.getCurrencyCode()); if (!recordExists && (currencyId != Constants.NOT_SET)) { long newId = infoService.insertRaw(db, InfoKeys.BASECURRENCYID, currencyId); if (newId <= 0) { ExceptionHandler handler = new ExceptionHandler(getContext(), this); handler.showMessage("error inserting base currency on init"); } } else { // Update the (empty) record to the default currency. long updatedRecords = infoService.updateRaw(db, recordId, InfoKeys.BASECURRENCYID, currencyId); if (updatedRecords <= 0) { ExceptionHandler handler = new ExceptionHandler(getContext(), this); handler.showMessage("error updating base currency on init"); } } // Can't use provider here as the database is not ready. // int currencyId = // currencyService.loadCurrencyIdFromSymbol(systemCurrency.getCurrencyCode()); // String baseCurrencyId = infoService.getInfoValue(InfoService.BASECURRENCYID); // if (!StringUtils.isEmpty(baseCurrencyId)) return; // infoService.setInfoValue(InfoService.BASECURRENCYID, // Integer.toString(currencyId)); } catch (Exception e) { ExceptionHandler handler = new ExceptionHandler(getContext(), this); handler.handle(e, "init database, currency"); } }
public void showChart() { PayeeReportAdapter adapter = (PayeeReportAdapter) getListAdapter(); if (adapter == null) return; Cursor cursor = adapter.getCursor(); if (cursor == null) return; if (!cursor.moveToFirst()) return; ArrayList<ValuePieEntry> arrayList = new ArrayList<ValuePieEntry>(); while (!cursor.isAfterLast()) { ValuePieEntry item = new ValuePieEntry(); // total double total = Math.abs(cursor.getDouble(cursor.getColumnIndex("TOTAL"))); if (!TextUtils.isEmpty(cursor.getString(cursor.getColumnIndex(ViewMobileData.PAYEE)))) { item.setText(cursor.getString(cursor.getColumnIndex(ViewMobileData.PAYEE))); } else { item.setText(getString(R.string.empty_payee)); } item.setValue(total); CurrencyService currencyService = new CurrencyService(getContext()); item.setValueFormatted( currencyService.getBaseCurrencyFormatted(MoneyFactory.fromDouble(total))); // add element arrayList.add(item); // move to next record cursor.moveToNext(); } Bundle args = new Bundle(); args.putSerializable(PieChartFragment.KEY_CATEGORIES_VALUES, arrayList); // get fragment manager FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); if (fragmentManager != null) { PieChartFragment fragment; fragment = (PieChartFragment) fragmentManager.findFragmentByTag( IncomeVsExpensesChartFragment.class.getSimpleName()); if (fragment == null) { fragment = new PieChartFragment(); } fragment.setChartArguments(args); fragment.setDisplayHomeAsUpEnabled(true); if (fragment.isVisible()) fragment.onResume(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); if (((PayeesReportActivity) getActivity()).mIsDualPanel) { fragmentTransaction.replace( R.id.fragmentChart, fragment, PieChartFragment.class.getSimpleName()); } else { fragmentTransaction.replace( R.id.fragmentContent, fragment, PieChartFragment.class.getSimpleName()); fragmentTransaction.addToBackStack(null); } fragmentTransaction.commit(); } }
private String getFormattedAccountBalance(Context context, Account account) { WhereStatementGenerator where = new WhereStatementGenerator(); where.addStatement(QueryAccountBills.ACCOUNTID, "=", account.getId()); String selection = where.getWhere(); AccountService service = new AccountService(context); Money total = service.loadBalance(selection); // format the amount CurrencyService currencyService = new CurrencyService(context); String summary = currencyService.getCurrencyFormatted(account.getCurrencyId(), total); return summary; }
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; }
@Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { super.onLoadFinished(loader, data); switch (loader.getId()) { case ID_LOADER: if (data == null) return; // parse cursor for calculate total double totalAmount = 0; while (data.moveToNext()) { totalAmount += data.getDouble(data.getColumnIndex("TOTAL")); } CurrencyService currencyService = new CurrencyService(getContext()); TextView txtColumn2 = (TextView) mFooterListView.findViewById(R.id.textViewColumn2); txtColumn2.setText( currencyService.getBaseCurrencyFormatted(MoneyFactory.fromDouble(totalAmount))); // solve bug chart if (data.getCount() > 0) { getListView().removeFooterView(mFooterListView); getListView().addFooterView(mFooterListView); } // handler to show chart if (((PayeesReportActivity) getActivity()).mIsDualPanel) { Handler handler = new Handler(); handler.postDelayed( new Runnable() { @Override public void run() { showChart(); } }, 1 * 1000); } } }
@Override public void bindView(View view, Context context, Cursor cursor) { TextView txtColumn1 = (TextView) view.findViewById(R.id.textViewColumn1); TextView txtColumn2 = (TextView) view.findViewById(R.id.textViewColumn2); Core core = new Core(context); double total = cursor.getDouble(cursor.getColumnIndex("TOTAL")); String column1; String category = cursor.getString(cursor.getColumnIndex(ViewMobileData.Category)); if (!TextUtils.isEmpty(category)) { column1 = "<b>" + category + "</b>"; String subCategory = cursor.getString(cursor.getColumnIndex(ViewMobileData.Subcategory)); if (!TextUtils.isEmpty(subCategory)) { column1 += " : " + subCategory; } } else { column1 = "<i>" + context.getString(R.string.empty_category); } txtColumn1.setText(Html.fromHtml(column1)); CurrencyService currencyService = new CurrencyService(mContext); txtColumn2.setText( currencyService.getCurrencyFormatted( currencyService.getBaseCurrencyId(), MoneyFactory.fromDouble(total))); if (total < 0) { txtColumn2.setTextColor( context.getResources().getColor(core.resolveIdAttribute(R.attr.holo_red_color_theme))); } else { txtColumn2.setTextColor( context.getResources().getColor(core.resolveIdAttribute(R.attr.holo_green_color_theme))); } // view.setBackgroundColor(core.resolveColorAttribute(cursor.getPosition() % 2 == 1 ? // R.attr.row_dark_theme : R.attr.row_light_theme)); }