package name.abuchen.portfolio.checks.impl;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import name.abuchen.portfolio.Messages;
import name.abuchen.portfolio.checks.Check;
import name.abuchen.portfolio.checks.Issue;
import name.abuchen.portfolio.checks.QuickFix;
import name.abuchen.portfolio.model.Account;
import name.abuchen.portfolio.model.AccountTransaction;
import name.abuchen.portfolio.model.AccountTransaction.Type;
import name.abuchen.portfolio.model.Client;
public class DividendsAndInterestCheck implements Check
{
private static final class DividendsAndInterestIssue extends AbstractAccountIssue
{
private Type target;
public DividendsAndInterestIssue(Client client, Account account, AccountTransaction transaction, Type target)
{
super(client, account, transaction);
this.target = target;
}
@Override
public String getLabel()
{
if (target == Type.INTEREST)
return Messages.IssueDividendWithoutSecurity;
else
return MessageFormat.format(Messages.IssueInterestWithSecurity, transaction.getSecurity().getName());
}
@Override
public List<QuickFix> getAvailableFixes()
{
List<QuickFix> answer = new ArrayList<QuickFix>();
answer.add(new ConvertFix(transaction, target));
answer.add(new DeleteTransactionFix<AccountTransaction>(client, account, transaction));
return answer;
}
}
private static final class ConvertFix implements QuickFix
{
private AccountTransaction transaction;
private Type target;
public ConvertFix(AccountTransaction transaction, Type target)
{
this.transaction = transaction;
this.target = target;
}
@Override
public String getLabel()
{
return MessageFormat.format(Messages.FixConvertToType, target);
}
@Override
public void execute()
{
transaction.setType(target);
}
@Override
public String getDoneLabel()
{
return MessageFormat.format(Messages.FixConvertToTypeDone, target);
}
}
@Override
public List<Issue> execute(Client client)
{
List<Issue> answer = new ArrayList<Issue>();
for (Account account : client.getAccounts())
{
for (AccountTransaction transaction : account.getTransactions())
{
if (transaction.getType() == Type.DIVIDENDS && transaction.getSecurity() == null)
{
answer.add(new DividendsAndInterestIssue(client, account, transaction, Type.INTEREST));
}
else if (transaction.getType() == Type.INTEREST && transaction.getSecurity() != null)
{
answer.add(new DividendsAndInterestIssue(client, account, transaction, Type.DIVIDENDS));
}
}
}
return answer;
}
}