package name.abuchen.portfolio.checks.impl;
import java.text.MessageFormat;
import java.util.List;
import java.util.stream.Collectors;
import name.abuchen.portfolio.Messages;
import name.abuchen.portfolio.checks.QuickFix;
import name.abuchen.portfolio.model.Account;
import name.abuchen.portfolio.model.AccountTransaction;
import name.abuchen.portfolio.model.AccountTransferEntry;
import name.abuchen.portfolio.model.Client;
/* package */class MissingAccountTransferIssue extends AbstractAccountIssue
{
private final class CreateTransferFix implements QuickFix
{
private Account crossAccount;
private CreateTransferFix(Account crossAccount)
{
this.crossAccount = crossAccount;
}
@Override
public String getLabel()
{
return MessageFormat.format(Messages.FixCreateTransfer, crossAccount.getName());
}
@Override
public String getDoneLabel()
{
AccountTransaction.Type target = null;
if (transaction.getType() == AccountTransaction.Type.TRANSFER_IN)
target = AccountTransaction.Type.TRANSFER_OUT;
else
target = AccountTransaction.Type.TRANSFER_IN;
return MessageFormat.format(Messages.FixCreateTransferDone, target.toString());
}
@Override
public void execute()
{
Account from = null;
Account to = null;
if (transaction.getType() == AccountTransaction.Type.TRANSFER_IN)
{
from = crossAccount;
to = account;
}
else
{
from = account;
to = crossAccount;
}
AccountTransferEntry entry = new AccountTransferEntry(from, to);
entry.setDate(transaction.getDate());
entry.setAmount(transaction.getAmount());
entry.setCurrencyCode(transaction.getCurrencyCode());
entry.insert();
account.getTransactions().remove(transaction);
}
}
public MissingAccountTransferIssue(Client client, Account account, AccountTransaction transaction)
{
super(client, account, transaction);
}
@Override
public String getLabel()
{
return MessageFormat.format(Messages.IssueMissingAccountTransfer, transaction.getType().toString());
}
@Override
public List<QuickFix> getAvailableFixes()
{
List<QuickFix> answer = client.getAccounts().stream() //
.filter(a -> !a.equals(account)) //
.map(a -> new CreateTransferFix(a)) //
.collect(Collectors.toList());
answer.add(new DeleteTransactionFix<AccountTransaction>(client, account, transaction));
return answer;
}
}