use of name.abuchen.portfolio.model.AccountTransaction in project portfolio by buchen.
the class ClientPerformanceSnapshotTest method testDividendTransactionWithTaxes.
@Test
public void testDividendTransactionWithTaxes() {
Client client = new Client();
Security security = new SecurityBuilder().addTo(client);
Account account = new AccountBuilder().addTo(client);
AccountTransaction dividend = new AccountTransaction();
dividend.setDateTime(LocalDateTime.parse("2011-03-01T00:00"));
dividend.setType(AccountTransaction.Type.DIVIDENDS);
dividend.setSecurity(security);
dividend.setMonetaryAmount(Money.of(CurrencyUnit.EUR, 100_00));
dividend.addUnit(new Transaction.Unit(Transaction.Unit.Type.TAX, Money.of(CurrencyUnit.EUR, 10_00)));
assertThat(dividend.getGrossValue(), is(Money.of(CurrencyUnit.EUR, 110_00)));
account.addTransaction(dividend);
CurrencyConverter converter = new TestCurrencyConverter();
ClientPerformanceSnapshot snapshot = new ClientPerformanceSnapshot(client, converter, startDate, endDate);
assertThat(snapshot.getValue(CategoryType.EARNINGS), is(Money.of(CurrencyUnit.EUR, 110_00)));
assertThat(snapshot.getValue(CategoryType.TAXES), is(Money.of(CurrencyUnit.EUR, 10_00)));
assertThat(snapshot.getEarnings().size(), is(1));
assertThat(snapshot.getCategoryByType(CategoryType.EARNINGS).getPositions().get(0).getValuation(), is(Money.of(CurrencyUnit.EUR, 110_00)));
GroupEarningsByAccount.Item item = new GroupEarningsByAccount(snapshot).getItems().get(0);
assertThat(item.getSum(), is(Money.of(CurrencyUnit.EUR, 110_00)));
assertThatCalculationWorksOut(snapshot, converter);
}
use of name.abuchen.portfolio.model.AccountTransaction in project portfolio by buchen.
the class ClientPerformanceSnapshotTest method testCurrencyGainsWithTransferalInOtherCurrencies.
@Test
public void testCurrencyGainsWithTransferalInOtherCurrencies() {
Client client = new Client();
Account usd = //
new AccountBuilder("USD").deposit_("2015-01-01", //
1000_00).addTo(client);
Account cad = //
new AccountBuilder("CAD").deposit_("2015-01-01", //
1000_00).addTo(client);
// insert account transfer
AccountTransferEntry entry = new AccountTransferEntry(usd, cad);
entry.setDate(LocalDateTime.parse("2015-01-10T00:00"));
AccountTransaction source = entry.getSourceTransaction();
AccountTransaction target = entry.getTargetTransaction();
source.setMonetaryAmount(Money.of("USD", 500_00));
target.setMonetaryAmount(Money.of("CAD", 1000_00));
source.addUnit(new Unit(Unit.Type.GROSS_VALUE, source.getMonetaryAmount(), target.getMonetaryAmount(), BigDecimal.valueOf(.5)));
entry.insert();
// check currency gain calculation of client performance snapshot
CurrencyConverter converter = new TestCurrencyConverter();
ClientPerformanceSnapshot snapshot = new //
ClientPerformanceSnapshot(//
client, //
converter, LocalDate.parse("2015-01-01"), LocalDate.parse("2015-01-15"));
MutableMoney currencyGains = MutableMoney.of(converter.getTermCurrency());
currencyGains.subtract(snapshot.getValue(CategoryType.INITIAL_VALUE));
currencyGains.subtract(snapshot.getValue(CategoryType.CAPITAL_GAINS));
currencyGains.subtract(snapshot.getValue(CategoryType.EARNINGS));
currencyGains.add(snapshot.getValue(CategoryType.FEES));
currencyGains.add(snapshot.getValue(CategoryType.TAXES));
currencyGains.add(snapshot.getValue(CategoryType.TRANSFERS));
currencyGains.add(snapshot.getValue(CategoryType.FINAL_VALUE));
assertThat(snapshot.getCategoryByType(CategoryType.CURRENCY_GAINS).getValuation(), is(currencyGains.toMoney()));
}
use of name.abuchen.portfolio.model.AccountTransaction in project portfolio by buchen.
the class ClientPerformanceSnapshotTest method testDepositPlusInterestLastDay.
@Test
public void testDepositPlusInterestLastDay() {
Client client = new Client();
Account account = new Account();
account.addTransaction(new AccountTransaction(LocalDateTime.of(2010, Month.JANUARY, 1, 0, 0), CurrencyUnit.EUR, 1000_00, null, AccountTransaction.Type.DEPOSIT));
account.addTransaction(new AccountTransaction(LocalDateTime.of(2011, Month.DECEMBER, 31, 0, 0), CurrencyUnit.EUR, 50_00, null, AccountTransaction.Type.INTEREST));
client.addAccount(account);
CurrencyConverter converter = new TestCurrencyConverter();
ClientPerformanceSnapshot snapshot = new ClientPerformanceSnapshot(client, converter, startDate, endDate);
assertThat(snapshot.getValue(CategoryType.INITIAL_VALUE), is(Money.of(CurrencyUnit.EUR, 1000_00)));
assertThat(snapshot.getValue(CategoryType.EARNINGS), is(Money.of(CurrencyUnit.EUR, 50_00)));
assertThat(snapshot.getValue(CategoryType.CAPITAL_GAINS), is(Money.of(CurrencyUnit.EUR, 0)));
assertThat(snapshot.getValue(CategoryType.FINAL_VALUE), is(Money.of(CurrencyUnit.EUR, 1050_00)));
assertThat(snapshot.getAbsoluteDelta(), is(snapshot.getValue(CategoryType.FINAL_VALUE).subtract(snapshot.getValue(CategoryType.TRANSFERS)).subtract(snapshot.getValue(CategoryType.INITIAL_VALUE))));
}
use of name.abuchen.portfolio.model.AccountTransaction in project portfolio by buchen.
the class AccountTransferModel method applyChanges.
@Override
public void applyChanges() {
if (sourceAccount == null)
throw new UnsupportedOperationException(Messages.MsgAccountFromMissing);
if (targetAccount == null)
throw new UnsupportedOperationException(Messages.MsgAccountToMissing);
AccountTransferEntry t;
if (source != null && sourceAccount.equals(source.getOwner(source.getSourceTransaction())) && targetAccount.equals(source.getOwner(source.getTargetTransaction()))) {
// transaction stays in same accounts
t = source;
} else {
if (source != null) {
@SuppressWarnings("unchecked") TransactionOwner<Transaction> owner = (TransactionOwner<Transaction>) source.getOwner(source.getSourceTransaction());
owner.deleteTransaction(source.getSourceTransaction(), client);
source = null;
}
t = new AccountTransferEntry(sourceAccount, targetAccount);
t.getSourceTransaction().setCurrencyCode(sourceAccount.getCurrencyCode());
t.getTargetTransaction().setCurrencyCode(targetAccount.getCurrencyCode());
t.insert();
}
t.setDate(date.atStartOfDay());
t.setNote(note);
// if source and target account have the same currencies, no forex data
// needs to be stored
AccountTransaction sourceTransaction = t.getSourceTransaction();
sourceTransaction.clearUnits();
if (sourceAccount.getCurrencyCode().equals(targetAccount.getCurrencyCode())) {
sourceTransaction.setAmount(amount);
t.getTargetTransaction().setAmount(amount);
} else {
// TODO improve naming of fields: the source amount is called
// 'fxAmount' while the target amount is just called 'amount' but
// then the source account holds the 'forex' which is switched
sourceTransaction.setAmount(fxAmount);
t.getTargetTransaction().setAmount(amount);
Transaction.Unit forex = new //
Transaction.Unit(//
Transaction.Unit.Type.GROSS_VALUE, //
Money.of(sourceAccount.getCurrencyCode(), fxAmount), //
Money.of(targetAccount.getCurrencyCode(), amount), getInverseExchangeRate());
sourceTransaction.addUnit(forex);
}
}
use of name.abuchen.portfolio.model.AccountTransaction in project portfolio by buchen.
the class SecuritiesChart method setupTooltip.
private void setupTooltip() {
TimelineChartToolTip toolTip = chart.getToolTip();
toolTip.setValueFormat(new DecimalFormat(Values.Quote.pattern()));
// $NON-NLS-1$
toolTip.addSeriesExclude(Messages.LabelChartDetailClosingIndicator + "Positive");
// $NON-NLS-1$
toolTip.addSeriesExclude(Messages.LabelChartDetailClosingIndicator + "Negative");
// $NON-NLS-1$
toolTip.addSeriesExclude(Messages.LabelChartDetailClosingIndicator + "Zero");
toolTip.addSeriesExclude(Messages.SecurityMenuBuy);
// $NON-NLS-1$
toolTip.addSeriesExclude(Messages.SecurityMenuBuy + "1");
// $NON-NLS-1$
toolTip.addSeriesExclude(Messages.SecurityMenuBuy + "2");
toolTip.addSeriesExclude(Messages.SecurityMenuSell);
// $NON-NLS-1$
toolTip.addSeriesExclude(Messages.SecurityMenuSell + "1");
// $NON-NLS-1$
toolTip.addSeriesExclude(Messages.SecurityMenuSell + "2");
toolTip.addSeriesExclude(Messages.LabelChartDetailDividends);
// $NON-NLS-1$
toolTip.addSeriesExclude(Messages.LabelChartDetailDividends + "1");
// $NON-NLS-1$
toolTip.addSeriesExclude(Messages.LabelChartDetailDividends + "2");
toolTip.addSeriesExclude(Messages.LabelChartDetailBollingerBands);
toolTip.addExtraInfo((composite, focus) -> {
if (focus instanceof Date) {
Instant instant = ((Date) focus).toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
LocalDate date = zdt.toLocalDate();
Interval displayInterval = Interval.of(date.minusDays(5), date.plusDays(5));
//
customTooltipEvents.stream().filter(//
t -> displayInterval.contains(t.getDateTime())).forEach(t -> {
if (t instanceof AccountTransaction)
addDividendTooltip(composite, (AccountTransaction) t);
else if (t instanceof PortfolioTransaction)
addInvestmentTooltip(composite, (PortfolioTransaction) t);
});
}
});
}
Aggregations