예제 #1
0
  @Override
  public Status process(BuySellEntry entry, Account account, Portfolio portfolio) {
    if (convertBuySellToDelivery) {
      PortfolioTransaction t = entry.getPortfolioTransaction();

      PortfolioTransaction delivery = new PortfolioTransaction();
      delivery.setType(
          t.getType() == PortfolioTransaction.Type.BUY
              ? PortfolioTransaction.Type.DELIVERY_INBOUND
              : PortfolioTransaction.Type.DELIVERY_OUTBOUND);

      delivery.setDate(t.getDate());
      delivery.setSecurity(t.getSecurity());
      delivery.setMonetaryAmount(t.getMonetaryAmount());
      delivery.setNote(t.getNote());
      delivery.setShares(t.getShares());
      delivery.addUnits(t.getUnits());

      return process(delivery, portfolio);
    } else {
      entry.setPortfolio(portfolio);
      entry.setAccount(account);
      entry.insert();
      return Status.OK_STATUS;
    }
  }
예제 #2
0
 private PortfolioTransaction convertTo(PortfolioTransaction t, PortfolioTransaction.Type type) {
   PortfolioTransaction clone = new PortfolioTransaction();
   clone.setType(type);
   clone.setDate(t.getDate());
   clone.setCurrencyCode(t.getCurrencyCode());
   clone.setSecurity(t.getSecurity());
   clone.setAmount(t.getAmount());
   clone.setShares(t.getShares());
   clone.addUnits(t.getUnits());
   return clone;
 }
예제 #3
0
  private void updateChart(Security security) {
    ISeries series = chart.getSeriesSet().getSeries(Messages.ColumnQuote);
    if (series != null) chart.getSeriesSet().deleteSeries(Messages.ColumnQuote);
    chart.clearMarkerLines();

    if (security == null || security.getPrices().isEmpty()) {
      chart.getTitle().setText(security == null ? "..." : security.getName()); // $NON-NLS-1$
      chart.redraw();
      return;
    }

    chart.getTitle().setText(security.getName());

    List<SecurityPrice> prices = security.getPrices();

    int index;
    Date[] dates;
    double[] values;

    if (chartPeriod == null) {
      index = 0;
      dates = new Date[prices.size()];
      values = new double[prices.size()];
    } else {
      index =
          Math.abs(
              Collections.binarySearch(
                  prices, new SecurityPrice(chartPeriod, 0), new SecurityPrice.ByDate()));

      if (index >= prices.size()) {
        // no data available
        chart.redraw();
        return;
      }

      dates = new Date[prices.size() - index];
      values = new double[prices.size() - index];
    }

    for (int ii = 0; index < prices.size(); index++, ii++) {
      SecurityPrice p = prices.get(index);
      dates[ii] = p.getTime();
      values[ii] = p.getValue() / Values.Quote.divider();
    }

    ILineSeries lineSeries =
        (ILineSeries) chart.getSeriesSet().createSeries(SeriesType.LINE, Messages.ColumnQuote);
    lineSeries.setXDateSeries(dates);
    lineSeries.setLineWidth(2);
    lineSeries.enableArea(true);
    lineSeries.setSymbolType(PlotSymbolType.NONE);
    lineSeries.setYSeries(values);
    lineSeries.setAntialias(SWT.ON);

    chart.getAxisSet().adjustRange();

    for (Portfolio portfolio : getClient().getPortfolios()) {
      for (PortfolioTransaction t : portfolio.getTransactions()) {
        if (t.getSecurity() == security
            && (chartPeriod == null || chartPeriod.before(t.getDate()))) {
          String label = Values.Share.format(t.getShares());
          switch (t.getType()) {
            case BUY:
            case TRANSFER_IN:
            case DELIVERY_INBOUND:
              chart.addMarkerLine(t.getDate(), new RGB(0, 128, 0), label);
              break;
            case SELL:
            case TRANSFER_OUT:
            case DELIVERY_OUTBOUND:
              chart.addMarkerLine(t.getDate(), new RGB(128, 0, 0), "-" + label); // $NON-NLS-1$
              break;
            default:
              throw new UnsupportedOperationException();
          }
        }
      }
    }

    chart.redraw();
  }