package name.abuchen.portfolio.model;
import java.time.LocalDate;
import name.abuchen.portfolio.model.PortfolioTransaction.Type;
import name.abuchen.portfolio.money.Money;
public class BuySellEntry implements CrossEntry, Annotated
{
private Portfolio portfolio;
private PortfolioTransaction portfolioTransaction;
private Account account;
private AccountTransaction accountTransaction;
public BuySellEntry()
{
this(null, null);
}
public BuySellEntry(Portfolio portfolio, Account account)
{
this.portfolio = portfolio;
this.portfolioTransaction = new PortfolioTransaction();
this.portfolioTransaction.setCrossEntry(this);
this.account = account;
this.accountTransaction = new AccountTransaction();
this.accountTransaction.setCrossEntry(this);
}
public void setPortfolio(Portfolio portfolio)
{
this.portfolio = portfolio;
}
public Portfolio getPortfolio()
{
return this.portfolio;
}
public void setAccount(Account account)
{
this.account = account;
}
public Account getAccount()
{
return this.account;
}
public void setDate(LocalDate date)
{
this.portfolioTransaction.setDate(date);
this.accountTransaction.setDate(date);
}
public void setType(Type type)
{
this.portfolioTransaction.setType(type);
this.accountTransaction.setType(AccountTransaction.Type.valueOf(type.name()));
}
public void setSecurity(Security security)
{
this.portfolioTransaction.setSecurity(security);
this.accountTransaction.setSecurity(security);
}
public void setShares(long shares)
{
this.portfolioTransaction.setShares(shares);
}
public void setAmount(long amount)
{
this.portfolioTransaction.setAmount(amount);
this.accountTransaction.setAmount(amount);
}
public void setCurrencyCode(String currencyCode)
{
this.portfolioTransaction.setCurrencyCode(currencyCode);
this.accountTransaction.setCurrencyCode(currencyCode);
}
public void setMonetaryAmount(Money amount)
{
this.portfolioTransaction.setMonetaryAmount(amount);
this.accountTransaction.setMonetaryAmount(amount);
}
@Override
public String getNote()
{
return this.portfolioTransaction.getNote();
}
@Override
public void setNote(String note)
{
this.portfolioTransaction.setNote(note);
this.accountTransaction.setNote(note);
}
public void insert()
{
portfolio.addTransaction(portfolioTransaction);
account.addTransaction(accountTransaction);
}
@Override
public void updateFrom(Transaction t)
{
if (t == accountTransaction)
{
portfolioTransaction.setDate(accountTransaction.getDate());
portfolioTransaction.setSecurity(accountTransaction.getSecurity());
portfolioTransaction.setNote(accountTransaction.getNote());
}
else if (t == portfolioTransaction)
{
accountTransaction.setDate(portfolioTransaction.getDate());
accountTransaction.setSecurity(portfolioTransaction.getSecurity());
accountTransaction.setNote(portfolioTransaction.getNote());
}
else
{
throw new UnsupportedOperationException();
}
}
@Override
public TransactionOwner<? extends Transaction> getOwner(Transaction t)
{
if (t.equals(portfolioTransaction))
return portfolio;
else if (t.equals(accountTransaction))
return account;
else
throw new UnsupportedOperationException();
}
@Override
public Transaction getCrossTransaction(Transaction t)
{
if (t.equals(portfolioTransaction))
return accountTransaction;
else if (t.equals(accountTransaction))
return portfolioTransaction;
else
throw new UnsupportedOperationException();
}
@Override
public TransactionOwner<? extends Transaction> getCrossOwner(Transaction t)
{
if (t.equals(portfolioTransaction))
return account;
else if (t.equals(accountTransaction))
return portfolio;
else
throw new UnsupportedOperationException();
}
public PortfolioTransaction getPortfolioTransaction()
{
return portfolioTransaction;
}
public AccountTransaction getAccountTransaction()
{
return accountTransaction;
}
}