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.QuickFix;
import name.abuchen.portfolio.model.Account;
import name.abuchen.portfolio.model.AccountTransaction;
import name.abuchen.portfolio.model.BuySellEntry;
import name.abuchen.portfolio.model.Client;
import name.abuchen.portfolio.model.Portfolio;
import name.abuchen.portfolio.model.PortfolioTransaction;
import name.abuchen.portfolio.money.Values;
/* package */class MissingBuySellPortfolioIssue extends AbstractAccountIssue
{
private final class CreateBuySellEntryFix implements QuickFix
{
private final Portfolio portfolio;
private CreateBuySellEntryFix(Portfolio portfolio)
{
this.portfolio = portfolio;
}
@Override
public String getLabel()
{
return MessageFormat.format(Messages.FixCreateCrossEntryPortfolio, portfolio.getName());
}
@Override
public String getDoneLabel()
{
return MessageFormat.format(Messages.FixCreateCrossEntryDone, transaction.getType().toString());
}
@Override
public void execute()
{
BuySellEntry entry = new BuySellEntry(portfolio, account);
entry.setDate(transaction.getDate());
entry.setType(PortfolioTransaction.Type.valueOf(transaction.getType().name()));
entry.setSecurity(transaction.getSecurity());
entry.setShares(Values.Share.factor());
entry.setAmount(transaction.getAmount());
entry.setCurrencyCode(transaction.getCurrencyCode());
entry.insert();
account.getTransactions().remove(transaction);
}
}
public MissingBuySellPortfolioIssue(Client client, Account account, AccountTransaction transaction)
{
super(client, account, transaction);
}
@Override
public String getLabel()
{
return MessageFormat.format(Messages.IssueMissingBuySellInPortfolio, transaction.getType().toString(),
transaction.getSecurity().getName());
}
@Override
public List<QuickFix> getAvailableFixes()
{
List<QuickFix> answer = new ArrayList<QuickFix>();
answer.add(new DeleteTransactionFix<AccountTransaction>(client, account, transaction));
client.getPortfolios().stream().forEach(p -> answer.add(new CreateBuySellEntryFix(p)));
return answer;
}
}