コード例 #1
0
  private Money calculateCurrentValue(List<AssetClass> allocations) {
    Money result = MoneyFactory.fromDouble(0);

    for (AssetClass ac : allocations) {
      Money itemValue;

      ItemType type = ac.getType();
      switch (type) {
        case Group:
          // Group. Calculate for children.
          itemValue = calculateCurrentValue(ac.getChildren());
          break;

        case Allocation:
          // Allocation. get value of all stocks.
          itemValue = sumStockValues(ac.getStocks());
          break;

        case Cash:
          itemValue = ac.getValue();
          break;

        default:
          ExceptionHandler handler = new ExceptionHandler(getContext());
          handler.showMessage("encountered an item with no type set!");
          itemValue = MoneyFactory.fromDouble(0);
          break;
      }

      ac.setCurrentValue(itemValue);
      result = result.add(itemValue);
    }

    return result;
  }
コード例 #2
0
  /**
   * 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);
  }
コード例 #3
0
 private Money getDifferenceSum(List<AssetClass> group) {
   Money sum = MoneyFactory.fromDouble(0);
   for (AssetClass item : group) {
     sum.add(item.getDifference());
   }
   return sum;
 }
コード例 #4
0
 private Money getCurrentAllocationSum(List<AssetClass> group) {
   Money sum = MoneyFactory.fromDouble(0);
   for (AssetClass item : group) {
     sum.add(item.getCurrentAllocation());
   }
   return sum;
 }
コード例 #5
0
  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();
    }
  }
コード例 #6
0
  @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));
  }