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.Client;
import name.abuchen.portfolio.model.Portfolio;
import name.abuchen.portfolio.model.PortfolioTransaction;
import name.abuchen.portfolio.model.PortfolioTransferEntry;
import name.abuchen.portfolio.money.Values;
/* package */class MissingPortfolioTransferIssue extends AbstractPortfolioIssue
{
private final class CreateTransferFix implements QuickFix
{
private Portfolio crossPortfolio;
private CreateTransferFix(Portfolio crossPortfolio)
{
this.crossPortfolio = crossPortfolio;
}
@Override
public String getLabel()
{
return MessageFormat.format(Messages.FixCreateTransfer, crossPortfolio.getName());
}
@Override
public String getDoneLabel()
{
PortfolioTransaction.Type target;
if (transaction.getType() == PortfolioTransaction.Type.TRANSFER_IN)
target = PortfolioTransaction.Type.TRANSFER_OUT;
else
target = PortfolioTransaction.Type.TRANSFER_IN;
return MessageFormat.format(Messages.FixCreateTransferDone, target.toString());
}
@Override
public void execute()
{
Portfolio from;
Portfolio to;
if (transaction.getType() == PortfolioTransaction.Type.TRANSFER_IN)
{
from = crossPortfolio;
to = portfolio;
}
else
{
from = portfolio;
to = crossPortfolio;
}
PortfolioTransferEntry entry = new PortfolioTransferEntry(from, to);
entry.setDate(transaction.getDate());
entry.setSecurity(transaction.getSecurity());
entry.setShares(transaction.getShares());
entry.setAmount(transaction.getAmount());
entry.setCurrencyCode(transaction.getCurrencyCode());
entry.insert();
portfolio.getTransactions().remove(transaction);
}
}
public MissingPortfolioTransferIssue(Client client, Portfolio portfolio, PortfolioTransaction transaction)
{
super(client, portfolio, transaction);
}
@Override
public String getLabel()
{
return MessageFormat.format(Messages.IssueMissingPortfolioTransfer, //
transaction.getType().toString(), //
Values.Share.format(transaction.getShares()), //
Values.Quote.format(transaction.getGrossPricePerShare()), //
transaction.getSecurity().getName());
}
@Override
public List<QuickFix> getAvailableFixes()
{
List<QuickFix> answer = client.getPortfolios().stream() //
.filter(p -> !p.equals(portfolio)) //
.map(p -> new CreateTransferFix(p)) //
.collect(Collectors.toList());
answer.add(new DeleteTransactionFix<PortfolioTransaction>(client, portfolio, transaction));
return answer;
}
}