use of name.abuchen.portfolio.money.Money in project portfolio by buchen.
the class CurrencyTestCase method testUSDAssetPosition.
private void testUSDAssetPosition(GroupByTaxonomy grouping) {
AssetPosition equityUSD = getAssetPositionByName(grouping, securityUSD.getName());
assertThat(equityUSD.getPosition().getShares(), is(Values.Share.factorize(10)));
// purchase value must be sum of both purchases:
// the one in EUR account and the one in USD account
// must take the inverse of the exchange used within the transaction
BigDecimal rate = BigDecimal.ONE.divide(BigDecimal.valueOf(0.8237), 10, BigDecimal.ROUND_HALF_DOWN);
assertThat(equityUSD.getPosition().getFIFOPurchaseValue(), is(Money.of("USD", Math.round(454_60 * rate.doubleValue()) + 571_90)));
// price per share is the total purchase price minus 20 USD fees and
// taxes divided by the number of shares
Money pricePerShare = //
equityUSD.getPosition().getFIFOPurchaseValue().subtract(Money.of("USD", 20_00)).divide(10);
assertThat(equityUSD.getPosition().getFIFOPurchasePrice(), is(pricePerShare));
// profit loss w/o rounding differences
assertThat(equityUSD.getProfitLoss(), is(equityUSD.getValuation().subtract(equityUSD.getFIFOPurchaseValue())));
assertThat(equityUSD.getPosition().getProfitLoss(), is(equityUSD.getPosition().calculateValue().subtract(equityUSD.getPosition().getFIFOPurchaseValue())));
}
use of name.abuchen.portfolio.money.Money in project portfolio by buchen.
the class CurrencyTestCase method testAssetCategories.
private void testAssetCategories(GroupByTaxonomy grouping) {
AssetCategory cash = getAssetCategoryByName(grouping, "Barvermögen");
Money cashValuation = Money.of(CurrencyUnit.EUR, 1000_00 + Math.round(1000_00 * (1 / 1.1588)));
assertThat(cash.getValuation(), is(cashValuation));
AssetPosition positionEUR = getAssetPositionByName(grouping, accountEUR.getName());
assertThat(positionEUR.getValuation(), is(Money.of(CurrencyUnit.EUR, 1000_00)));
AssetPosition positionUSD = getAssetPositionByName(grouping, accountUSD.getName());
assertThat(positionUSD.getValuation(), is(Money.of(CurrencyUnit.EUR, Math.round(1000_00 * (1 / 1.1588)))));
Money equityEURvaluation = Money.of(CurrencyUnit.EUR, Math.round(20 * securityEUR.getSecurityPrice(grouping.getDate()).getValue() / Values.Quote.dividerToMoney()));
Money equityUSDvaluation = Money.of("USD", Math.round(10 * securityUSD.getSecurityPrice(grouping.getDate()).getValue() / Values.Quote.dividerToMoney())).with(converter.at(grouping.getDate()));
Money equityValuation = Money.of(CurrencyUnit.EUR, equityEURvaluation.getAmount() + equityUSDvaluation.getAmount());
AssetCategory equity = getAssetCategoryByName(grouping, "Eigenkapital");
assertThat(equity.getValuation(), is(equityValuation));
AssetPosition equityEUR = getAssetPositionByName(grouping, securityEUR.getName());
assertThat(equityEUR.getValuation(), is(equityEURvaluation));
AssetPosition equityUSD = getAssetPositionByName(grouping, securityUSD.getName());
assertThat(equityUSD.getValuation(), is(equityUSDvaluation));
assertThat(grouping.getValuation(), is(cashValuation.add(equityValuation)));
}
use of name.abuchen.portfolio.money.Money in project portfolio by buchen.
the class StatementOfAssetsViewer method createColumns.
private // NOSONAR
Control createColumns(// NOSONAR
Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
TableColumnLayout layout = new TableColumnLayout();
container.setLayout(layout);
assets = new TableViewer(container, SWT.FULL_SELECTION);
ColumnViewerToolTipSupport.enableFor(assets, ToolTip.NO_RECREATE);
ColumnEditingSupport.prepare(assets);
assets.addSelectionChangedListener(event -> {
Element element = (Element) ((IStructuredSelection) event.getSelection()).getFirstElement();
if (element != null && element.isSecurity())
selectionService.setSelection(new SecuritySelection(client, element.getSecurity()));
});
support = new ShowHideColumnHelper(StatementOfAssetsViewer.class.getName(), client, preference, assets, layout);
// $NON-NLS-1$
Column column = new Column("0", Messages.ColumnSharesOwned, SWT.RIGHT, 80);
column.setLabelProvider(new // NOSONAR
SharesLabelProvider() {
@Override
public Long getValue(Object e) {
Element element = (Element) e;
return element.isSecurity() ? element.getSecurityPosition().getShares() : null;
}
});
column.setComparator(new ElementComparator(new AttributeComparator(e -> ((Element) e).isSecurity() ? ((Element) e).getSecurityPosition().getShares() : null)));
support.addColumn(column);
// $NON-NLS-1$
column = new NameColumn("1");
column.setLabelProvider(new // NOSONAR
NameColumnLabelProvider() {
@Override
public String getText(Object e) {
if (((Element) e).isGroupByTaxonomy())
return Messages.LabelTotalSum;
return super.getText(e);
}
@Override
public Font getFont(Object e) {
return ((Element) e).isGroupByTaxonomy() || ((Element) e).isCategory() ? boldFont : null;
}
@Override
public Image getImage(Object e) {
if (((Element) e).isCategory())
return null;
return super.getImage(e);
}
});
column.setEditingSupport(new // $NON-NLS-1$
StringEditingSupport(// $NON-NLS-1$
Named.class, // $NON-NLS-1$
"name") {
@Override
public boolean canEdit(Object element) {
boolean isCategory = ((Element) element).isCategory();
boolean isUnassignedCategory = isCategory && Classification.UNASSIGNED_ID.equals(((Element) element).getCategory().getClassification().getId());
return !isUnassignedCategory ? super.canEdit(element) : false;
}
}.setMandatory(true).addListener(new MarkDirtyListener(this.owner)));
column.getSorter().wrap(ElementComparator::new);
support.addColumn(column);
// $NON-NLS-1$
column = new Column("2", Messages.ColumnTicker, SWT.None, 60);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object e) {
Element element = (Element) e;
return element.isSecurity() ? element.getSecurity().getTickerSymbol() : null;
}
});
column.setComparator(new ElementComparator(new AttributeComparator(e -> ((Element) e).isSecurity() ? ((Element) e).getSecurity().getTickerSymbol() : null)));
support.addColumn(column);
// $NON-NLS-1$
column = new Column("12", Messages.ColumnWKN, SWT.None, 60);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object e) {
Element element = (Element) e;
return element.isSecurity() ? element.getSecurity().getWkn() : null;
}
});
column.setComparator(new ElementComparator(new AttributeComparator(e -> ((Element) e).isSecurity() ? ((Element) e).getSecurity().getWkn() : null)));
column.setVisible(false);
support.addColumn(column);
// $NON-NLS-1$
column = new IsinColumn("3");
column.getEditingSupport().addListener(new MarkDirtyListener(this.owner));
column.getSorter().wrap(ElementComparator::new);
column.setVisible(false);
support.addColumn(column);
// $NON-NLS-1$
column = new Column("4", Messages.ColumnQuote, SWT.RIGHT, 60);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object e) {
Element element = (Element) e;
if (!element.isSecurity())
return null;
Security security = element.getSecurity();
return Values.Quote.format(security.getCurrencyCode(), element.getSecurityPosition().getPrice().getValue(), client.getBaseCurrency());
}
});
column.setComparator(new ElementComparator(new AttributeComparator(e -> {
Element element = (Element) e;
if (!element.isSecurity())
return null;
return Money.of(element.getSecurity().getCurrencyCode(), element.getSecurityPosition().getPrice().getValue());
})));
support.addColumn(column);
// $NON-NLS-1$
column = new Column("qdate", Messages.ColumnDateOfQuote, SWT.LEFT, 80);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object e) {
Element element = (Element) e;
return element.isSecurity() ? Values.Date.format(element.getSecurityPosition().getPrice().getDate()) : null;
}
});
column.setComparator(new ElementComparator(new AttributeComparator(e -> ((Element) e).isSecurity() ? ((Element) e).getSecurityPosition().getPrice().getDate() : null)));
column.setVisible(false);
support.addColumn(column);
// $NON-NLS-1$
column = new Column("5", Messages.ColumnMarketValue, SWT.RIGHT, 80);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object e) {
Element element = (Element) e;
return Values.Money.format(element.getValuation(), client.getBaseCurrency());
}
@Override
public Font getFont(Object e) {
return ((Element) e).isGroupByTaxonomy() || ((Element) e).isCategory() ? boldFont : null;
}
});
// $NON-NLS-1$
column.setSorter(ColumnViewerSorter.create(Element.class, "valuation").wrap(ElementComparator::new));
support.addColumn(column);
// $NON-NLS-1$
column = new Column("6", Messages.ColumnShareInPercent, SWT.RIGHT, 80);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object e) {
Element element = (Element) e;
if (element.isGroupByTaxonomy())
return Values.Percent.format(1d);
if (element.isCategory())
return Values.Percent.format(element.getCategory().getShare());
else
return Values.Percent.format(element.getPosition().getShare());
}
@Override
public Font getFont(Object e) {
return ((Element) e).isGroupByTaxonomy() || ((Element) e).isCategory() ? boldFont : null;
}
});
// $NON-NLS-1$
column.setSorter(ColumnViewerSorter.create(Element.class, "valuation").wrap(ElementComparator::new));
support.addColumn(column);
// $NON-NLS-1$
column = new Column("7", Messages.ColumnPurchasePrice, SWT.RIGHT, 60);
column.setDescription(Messages.ColumnPurchasePrice_Description);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object e) {
Element element = (Element) e;
if (element.isSecurity()) {
Money purchasePrice = element.getSecurityPosition().getFIFOPurchasePrice();
return Values.Money.formatNonZero(purchasePrice, client.getBaseCurrency());
}
return null;
}
});
column.setComparator(new ElementComparator(new AttributeComparator(e -> ((Element) e).isSecurity() ? ((Element) e).getSecurityPosition().getFIFOPurchasePrice() : null)));
column.setVisible(false);
support.addColumn(column);
// $NON-NLS-1$
column = new Column("ppmvavg", Messages.ColumnPurchasePriceMovingAverage, SWT.RIGHT, 60);
column.setDescription(Messages.ColumnPurchasePriceMovingAverage_Description);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object e) {
Element element = (Element) e;
if (element.isSecurity()) {
Money purchasePrice = element.getSecurityPosition().getMovingAveragePurchasePrice();
return Values.Money.formatNonZero(purchasePrice, client.getBaseCurrency());
}
return null;
}
});
column.setComparator(new ElementComparator(new AttributeComparator(e -> ((Element) e).isSecurity() ? ((Element) e).getSecurityPosition().getMovingAveragePurchasePrice() : null)));
column.setVisible(false);
support.addColumn(column);
// $NON-NLS-1$
column = new Column("8", Messages.ColumnPurchaseValue, SWT.RIGHT, 80);
column.setDescription(Messages.ColumnPurchaseValue_Description);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object e) {
Element element = (Element) e;
Money purchaseValue = element.getFIFOPurchaseValue();
return Values.Money.formatNonZero(purchaseValue, client.getBaseCurrency());
}
@Override
public Font getFont(Object e) {
return ((Element) e).isGroupByTaxonomy() || ((Element) e).isCategory() ? boldFont : null;
}
});
column.setVisible(false);
column.setSorter(// $NON-NLS-1$
ColumnViewerSorter.create(Element.class, "FIFOPurchaseValue").wrap(ElementComparator::new));
support.addColumn(column);
// $NON-NLS-1$
column = new Column("pvmvavg", Messages.ColumnPurchaseValueMovingAverage, SWT.RIGHT, 80);
column.setDescription(Messages.ColumnPurchaseValueMovingAverage_Description);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object e) {
Element element = (Element) e;
Money purchaseValue = element.getMovingAveragePurchaseValue();
return Values.Money.formatNonZero(purchaseValue, client.getBaseCurrency());
}
@Override
public Font getFont(Object e) {
return ((Element) e).isGroupByTaxonomy() || ((Element) e).isCategory() ? boldFont : null;
}
});
column.setVisible(false);
column.setSorter(// $NON-NLS-1$
ColumnViewerSorter.create(Element.class, "MovingAveragePurchaseValue").wrap(ElementComparator::new));
support.addColumn(column);
// $NON-NLS-1$
column = new Column("9", Messages.ColumnProfitLoss, SWT.RIGHT, 80);
column.setLabelProvider(new // NOSONAR
ColumnLabelProvider() {
@Override
public String getText(Object e) {
Money profitLoss = ((Element) e).getProfitLoss();
return Values.Money.formatNonZero(profitLoss, client.getBaseCurrency());
}
@Override
public Color getForeground(Object e) {
Money profitLoss = ((Element) e).getProfitLoss();
return Display.getCurrent().getSystemColor(profitLoss.isNegative() ? SWT.COLOR_DARK_RED : SWT.COLOR_DARK_GREEN);
}
@Override
public Image getImage(Object e) {
Money profitLoss = ((Element) e).getProfitLoss();
if (profitLoss.isZero())
return null;
return profitLoss.isNegative() ? Images.RED_ARROW.image() : Images.GREEN_ARROW.image();
}
@Override
public Font getFont(Object e) {
return ((Element) e).isGroupByTaxonomy() || ((Element) e).isCategory() ? boldFont : null;
}
});
column.setVisible(false);
// $NON-NLS-1$
column.setSorter(ColumnViewerSorter.create(Element.class, "profitLoss").wrap(ElementComparator::new));
support.addColumn(column);
column = new NoteColumn();
column.getEditingSupport().addListener(new MarkDirtyListener(this.owner));
column.getSorter().wrap(ElementComparator::new);
support.addColumn(column);
// create a modifiable copy as all menus share the same list of
// reporting periods
List<ReportingPeriod> options = new ArrayList<>(owner.getPart().loadReportingPeriods());
addPerformanceColumns(options);
addDividendColumns(options);
addTaxonomyColumns();
addAttributeColumns();
addCurrencyColumns();
support.createColumns();
assets.getTable().setHeaderVisible(true);
assets.getTable().setLinesVisible(true);
assets.setContentProvider(new StatementOfAssetsContentProvider());
//
assets.addDragSupport(//
DND.DROP_MOVE, //
new Transfer[] { SecurityTransfer.getTransfer() }, new SecurityDragListener(assets));
LocalResourceManager resources = new LocalResourceManager(JFaceResources.getResources(), assets.getTable());
boldFont = resources.createFont(FontDescriptor.createFrom(assets.getTable().getFont()).setStyle(SWT.BOLD));
return container;
}
use of name.abuchen.portfolio.money.Money in project portfolio by buchen.
the class StatementOfAssetsViewer method addDividendColumns.
private void addDividendColumns(List<ReportingPeriod> options) {
ReportingPeriodLabelProvider labelProvider;
// $NON-NLS-1$
Column column = new Column("sumdiv", Messages.ColumnDividendSum, SWT.RIGHT, 80);
Function<Stream<Object>, Object> collector = elements -> elements.map(e -> (Money) e).collect(MoneyCollectors.sum(client.getBaseCurrency()));
labelProvider = new ReportingPeriodLabelProvider(SecurityPerformanceRecord::getSumOfDividends, collector, false);
// $NON-NLS-1$
column.setOptions(new ReportingPeriodColumnOptions(Messages.ColumnDividendSum + " {0}", options));
column.setGroupLabel(Messages.GroupLabelDividends);
column.setMenuLabel(Messages.ColumnDividendSum_MenuLabel);
column.setLabelProvider(labelProvider);
column.setSorter(ColumnViewerSorter.create(new ElementComparator(labelProvider)));
column.setVisible(false);
support.addColumn(column);
// $NON-NLS-1$
column = new Column("d%", Messages.ColumnDividendTotalRateOfReturn, SWT.RIGHT, 80);
labelProvider = new ReportingPeriodLabelProvider(SecurityPerformanceRecord::getTotalRateOfReturnDiv, null, false);
// $NON-NLS-1$
column.setOptions(new ReportingPeriodColumnOptions(Messages.ColumnDividendTotalRateOfReturn + " {0}", options));
column.setGroupLabel(Messages.GroupLabelDividends);
column.setDescription(Messages.ColumnDividendTotalRateOfReturn_Description);
column.setLabelProvider(labelProvider);
column.setSorter(ColumnViewerSorter.create(new ElementComparator(labelProvider)));
column.setVisible(false);
support.addColumn(column);
// $NON-NLS-1$
column = new Column("d%mvavg", Messages.ColumnDividendMovingAverageTotalRateOfReturn, SWT.RIGHT, 80);
labelProvider = new ReportingPeriodLabelProvider(SecurityPerformanceRecord::getTotalRateOfReturnDivMovingAverage, null, false);
// $NON-NLS-1$
column.setOptions(new ReportingPeriodColumnOptions(Messages.ColumnDividendMovingAverageTotalRateOfReturn + " {0}", options));
column.setGroupLabel(Messages.GroupLabelDividends);
column.setDescription(Messages.ColumnDividendMovingAverageTotalRateOfReturn_Description);
column.setLabelProvider(labelProvider);
column.setSorter(ColumnViewerSorter.create(new ElementComparator(labelProvider)));
column.setVisible(false);
support.addColumn(column);
}
use of name.abuchen.portfolio.money.Money in project portfolio by buchen.
the class BankSLMPDFExtractor method addForexGrossValue.
@SuppressWarnings("nls")
private void addForexGrossValue(Transaction<BuySellEntry> extractor) {
//
extractor.section("forexSum", "forexCurrency", "grossValue", "currency", "exchangeRate").optional().match(//
"Total Kurswert (?<forexCurrency>\\w{3}+) (?<forexSum>[\\d.'-]+)").match(//
"Change .../... (?<exchangeRate>[\\d.']+) (?<currency>\\w{3}+) (?<grossValue>[\\d.'-]+)").assign((t, v) -> {
Money grossValue = Money.of(asCurrencyCode(v.get("currency")), asAmount(v.get("grossValue")));
Money forex = Money.of(asCurrencyCode(v.get("forexCurrency")), asAmount(v.get("forexSum")));
BigDecimal exchangeRate = asExchangeRate(v.get("exchangeRate"));
Unit unit = new Unit(Unit.Type.GROSS_VALUE, grossValue, forex, exchangeRate);
// security actually matches
if (unit.getForex().getCurrencyCode().equals(t.getPortfolioTransaction().getSecurity().getCurrencyCode()))
t.getPortfolioTransaction().addUnit(unit);
});
}
Aggregations