Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@

import name.abuchen.portfolio.model.Account;
import name.abuchen.portfolio.model.AccountTransaction;
import name.abuchen.portfolio.model.AccountTransaction.Type;
import name.abuchen.portfolio.model.Transaction;
import name.abuchen.portfolio.money.Money;
import name.abuchen.portfolio.money.MutableMoney;
Expand All @@ -51,6 +50,7 @@
import name.abuchen.portfolio.ui.util.viewers.ColumnEditingSupport.ModificationListener;
import name.abuchen.portfolio.ui.util.viewers.ColumnViewerSorter;
import name.abuchen.portfolio.ui.util.viewers.CopyPasteSupport;
import name.abuchen.portfolio.ui.util.viewers.DateTimeLabelProvider;
import name.abuchen.portfolio.ui.util.viewers.ShowHideColumnHelper;
import name.abuchen.portfolio.ui.views.columns.AttributeColumn;
import name.abuchen.portfolio.ui.views.columns.CurrencyColumn;
Expand Down Expand Up @@ -110,7 +110,7 @@ protected void addButtons(ToolBarManager manager)
private void addNewButton(ToolBarManager manager)
{
SimpleAction.Runnable newAccountAction = a -> {
Account account = new Account();
var account = new Account();
account.setName(Messages.LabelNoName);
account.setCurrencyCode(getClient().getBaseCurrency());

Expand All @@ -126,14 +126,14 @@ private void addNewButton(ToolBarManager manager)

menuListener.add(new Separator());

Account account = (Account) accounts.getStructuredSelection().getFirstElement();
var account = (Account) accounts.getStructuredSelection().getFirstElement();
new AccountContextMenu(AccountListView.this).menuAboutToShow(menuListener, account, null);
}));
}

private void addFilterButton(ToolBarManager manager)
{
Action filter = new Action()
var filter = new Action()
{
@Override
public void run()
Expand All @@ -160,7 +160,7 @@ public void notifyModelUpdated()
{
resetInput();

Account account = (Account) ((IStructuredSelection) accounts.getSelection()).getFirstElement();
var account = (Account) ((IStructuredSelection) accounts.getSelection()).getFirstElement();
if (getClient().getAccounts().contains(account))
accounts.setSelection(new StructuredSelection(account));
else
Expand Down Expand Up @@ -197,8 +197,8 @@ public void onModified(Object element, Object newValue, Object oldValue)
@Override
protected Control createBody(Composite parent)
{
Composite container = new Composite(parent, SWT.NONE);
TableColumnLayout layout = new TableColumnLayout();
var container = new Composite(parent, SWT.NONE);
var layout = new TableColumnLayout();
container.setLayout(layout);

accounts = new TableViewer(container, SWT.FULL_SELECTION);
Expand All @@ -210,20 +210,64 @@ protected Control createBody(Composite parent)
accountColumns = new ShowHideColumnHelper(AccountListView.class.getSimpleName() + "@top2", //$NON-NLS-1$
getPreferenceStore(), accounts, layout);

Column column = new NameColumn("0", Messages.ColumnAccount, SWT.None, 150, getClient()); //$NON-NLS-1$
column.setLabelProvider(new NameColumnLabelProvider(getClient()) // NOSONAR
accountColumns.addColumn(defineAccountNameColumn());
accountColumns.addColumn(defineAccountBalanceColumn());
accountColumns.addColumn(defineCurrencyColumn());
accountColumns.addColumn(defineNotesColumn());
accountColumns.addColumn(defineLastTransactionDateColumn());

addAttributeColumns(accountColumns);

accountColumns.createColumns(true);

accounts.getTable().setHeaderVisible(true);
accounts.getTable().setLinesVisible(true);

accounts.setContentProvider(ArrayContentProvider.getInstance());

hookContextMenu(accounts.getTable(), this::fillAccountsContextMenu);

accounts.addSelectionChangedListener(event -> {
var account = (Account) event.getStructuredSelection().getFirstElement();
updateBalance(account);
setInformationPaneInput(account);
});

return container;
}

private Column defineLastTransactionDateColumn()
{
var column = new Column("last-date", "Letztes Buchungsdatum", SWT.RIGHT, 80); //$NON-NLS-1$
column.setLabelProvider(new DateTimeLabelProvider(a -> ((Account) a).getLastTransactionDate()));
ColumnViewerSorter.create(a -> ((Account) a).getLastTransactionDate()).attachTo(column);
return column;
}

private Column defineNotesColumn()
{
var column = new NoteColumn();
column.getEditingSupport().addListener(this);
return column;
}

private Column defineCurrencyColumn()
{
var column = new CurrencyColumn();
column.setEditingSupport(new CurrencyEditingSupport()
{
@Override
public Color getForeground(Object e)
public boolean canEdit(Object element)
{
boolean isRetired = ((Account) e).isRetired();
return isRetired ? Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY) : null;
return ((Account) element).getTransactions().isEmpty();
}
});
column.getEditingSupport().addListener(this);
accountColumns.addColumn(column);
return column;
}

column = new Column("1", Messages.ColumnBalance, SWT.RIGHT, 80); //$NON-NLS-1$
private Column defineAccountBalanceColumn()
{
var column = new Column("1", Messages.ColumnBalance, SWT.RIGHT, 80); //$NON-NLS-1$
column.setDescription(Messages.ColumnBalance_Description);
column.setLabelProvider(new ColumnLabelProvider()
{
Expand All @@ -235,41 +279,23 @@ public String getText(Object e)
});
ColumnViewerSorter.create(o -> ((Account) o).getCurrentAmount(LocalDateTime.now().with(LocalTime.MAX)))
.attachTo(column);
accountColumns.addColumn(column);
return column;
}

column = new CurrencyColumn();
column.setEditingSupport(new CurrencyEditingSupport()
private Column defineAccountNameColumn()
{
var column = new NameColumn("0", Messages.ColumnAccount, SWT.None, 150, getClient()); //$NON-NLS-1$
column.setLabelProvider(new NameColumnLabelProvider(getClient()) // NOSONAR
{
@Override
public boolean canEdit(Object element)
public Color getForeground(Object e)
{
return ((Account) element).getTransactions().isEmpty();
boolean isRetired = ((Account) e).isRetired();
return isRetired ? Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY) : null;
}
});
accountColumns.addColumn(column);

column = new NoteColumn();
column.getEditingSupport().addListener(this);
accountColumns.addColumn(column);

addAttributeColumns(accountColumns);

accountColumns.createColumns(true);

accounts.getTable().setHeaderVisible(true);
accounts.getTable().setLinesVisible(true);

accounts.setContentProvider(ArrayContentProvider.getInstance());

hookContextMenu(accounts.getTable(), this::fillAccountsContextMenu);

accounts.addSelectionChangedListener(event -> {
Account account = (Account) event.getStructuredSelection().getFirstElement();
updateBalance(account);
setInformationPaneInput(account);
});

return container;
return column;
}

private void addAttributeColumns(ShowHideColumnHelper support)
Expand All @@ -283,7 +309,7 @@ private void addAttributeColumns(ShowHideColumnHelper support)

private void fillAccountsContextMenu(IMenuManager manager) // NOSONAR
{
final Account account = (Account) ((IStructuredSelection) accounts.getSelection()).getFirstElement();
final var account = (Account) ((IStructuredSelection) accounts.getSelection()).getFirstElement();
if (account == null)
return;

Expand Down Expand Up @@ -323,7 +349,7 @@ private void fillAccountsContextMenu(IMenuManager manager) // NOSONAR
label += " (" + MessageFormat.format(Messages.LabelTransactionCount, account.getTransactions().size()) //$NON-NLS-1$
+ ")"; //$NON-NLS-1$

Action action = new ConfirmAction(label,
var action = new ConfirmAction(label,
MessageFormat.format(Messages.AccountMenuDeleteConfirm, account.getName()), //
a -> {
getClient().removeAccount(account);
Expand Down Expand Up @@ -353,37 +379,26 @@ private void updateBalance(Account account)
if (account == null)
return;

List<AccountTransaction> tx = new ArrayList<>(account.getTransactions());
Collections.sort(tx, Transaction.BY_DATE);
var transactions = new ArrayList<>(account.getTransactions());
Collections.sort(transactions, Transaction.BY_DATE);

MutableMoney balance = MutableMoney.of(account.getCurrencyCode());
for (AccountTransaction t : tx)
var balance = MutableMoney.of(account.getCurrencyCode());
for (var transaction : transactions)
{
Type type = t.getType();
var type = transaction.getType();
switch (type)
{
case DEPOSIT:
case INTEREST:
case DIVIDENDS:
case TAX_REFUND:
case SELL:
case TRANSFER_IN:
case FEES_REFUND:
balance.add(t.getMonetaryAmount());
case DEPOSIT, INTEREST, DIVIDENDS, TAX_REFUND, SELL, TRANSFER_IN, FEES_REFUND:
balance.add(transaction.getMonetaryAmount());
break;
case REMOVAL:
case FEES:
case INTEREST_CHARGE:
case TAXES:
case BUY:
case TRANSFER_OUT:
balance.subtract(t.getMonetaryAmount());
case REMOVAL, FEES, INTEREST_CHARGE, TAXES, BUY, TRANSFER_OUT:
balance.subtract(transaction.getMonetaryAmount());
break;
default:
throw new IllegalArgumentException("unsupported type " + type + " for transaction " + tx); //$NON-NLS-1$ //$NON-NLS-2$
throw new IllegalArgumentException("unsupported type " + type + " for transaction " + transactions); //$NON-NLS-1$ //$NON-NLS-2$
}

transaction2balance.put(t, balance.toMoney());
transaction2balance.put(transaction, balance.toMoney());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,21 +40,21 @@ private String getRawText(Object e)
@Override
public String getText(Object e)
{
String note = getRawText(e);
var note = getRawText(e);
return note == null || note.isEmpty() ? null : TextUtil.toSingleLine(note);
}

@Override
public Image getImage(Object e)
{
String note = getRawText(e);
return note != null && note.length() > 0 ? Images.NOTE.image() : null;
var note = getRawText(e);
return note != null && !note.isEmpty() ? Images.NOTE.image() : null;
}

@Override
public String getToolTipText(Object e)
{
String note = getRawText(e);
var note = getRawText(e);
return note == null || note.isEmpty() ? null : TextUtil.wordwrap(note);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,20 +161,9 @@ public long getCurrentAmount(LocalDateTime date)
.mapToLong(t -> {
switch (t.getType())
{
case DEPOSIT:
case DIVIDENDS:
case INTEREST:
case SELL:
case TRANSFER_IN:
case TAX_REFUND:
case FEES_REFUND:
case DEPOSIT, DIVIDENDS, INTEREST, SELL, TRANSFER_IN, TAX_REFUND, FEES_REFUND:
return t.getAmount();
case FEES:
case INTEREST_CHARGE:
case TAXES:
case REMOVAL:
case BUY:
case TRANSFER_OUT:
case FEES, INTEREST_CHARGE, TAXES, REMOVAL, BUY, TRANSFER_OUT:
return -t.getAmount();
default:
throw new UnsupportedOperationException("unsupported transaction type '" //$NON-NLS-1$
Expand All @@ -183,6 +172,13 @@ public long getCurrentAmount(LocalDateTime date)
}).sum();
}

public LocalDateTime getLastTransactionDate()
{
return transactions.stream() //
.max(Transaction.BY_DATE) //
.map(Transaction::getDateTime).orElse(null);
}

@Override
public String toString()
{
Expand Down
Loading