package name.abuchen.portfolio.ui.views.actions;
import org.eclipse.jface.action.Action;
import name.abuchen.portfolio.model.Account;
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.model.TransactionPair;
import name.abuchen.portfolio.ui.Messages;
public class ConvertDeliveryToBuySellAction extends Action
{
private final Client client;
private final TransactionPair<PortfolioTransaction> transaction;
public ConvertDeliveryToBuySellAction(Client client, TransactionPair<PortfolioTransaction> transaction)
{
this.client = client;
this.transaction = transaction;
if (transaction.getTransaction().getType() != PortfolioTransaction.Type.DELIVERY_INBOUND
&& transaction.getTransaction().getType() != PortfolioTransaction.Type.DELIVERY_OUTBOUND)
throw new IllegalArgumentException();
setText(transaction.getTransaction().getType() == PortfolioTransaction.Type.DELIVERY_INBOUND
? Messages.MenuConvertToBuy : Messages.MenuConvertToSell);
}
@Override
public void run()
{
// delete existing transaction
PortfolioTransaction deliveryTransaction = transaction.getTransaction();
transaction.getOwner().deleteTransaction(deliveryTransaction, client);
// create new buy / sell
Portfolio portfolio = (Portfolio) transaction.getOwner();
Account account = portfolio.getReferenceAccount();
BuySellEntry entry = new BuySellEntry(portfolio, account);
entry.setType(deliveryTransaction.getType() == PortfolioTransaction.Type.DELIVERY_INBOUND
? PortfolioTransaction.Type.BUY : PortfolioTransaction.Type.SELL);
entry.setDate(deliveryTransaction.getDate());
entry.setMonetaryAmount(deliveryTransaction.getMonetaryAmount());
entry.setSecurity(deliveryTransaction.getSecurity());
entry.setNote(deliveryTransaction.getNote());
entry.setShares(deliveryTransaction.getShares());
deliveryTransaction.getUnits().forEach(entry.getPortfolioTransaction()::addUnit);
entry.insert();
client.markDirty();
}
}