use of org.jfree.data.time.Month in project adempiere by adempiere.
the class MChartDatasource method addData.
public void addData(MChart parent) {
String value = getValueColumn();
String category;
String unit = "D";
if (!parent.isTimeSeries())
category = getCategoryColumn();
else {
if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Week)) {
unit = "W";
} else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Month)) {
unit = "MM";
} else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Quarter)) {
unit = "Q";
} else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Year)) {
unit = "Y";
}
category = " TRUNC(" + getDateColumn() + ", '" + unit + "') ";
}
String series = DB.TO_STRING(getName());
boolean hasSeries = false;
if (getSeriesColumn() != null) {
series = getSeriesColumn();
hasSeries = true;
}
String where = getWhereClause();
if (!Util.isEmpty(where)) {
where = Env.parseContext(getCtx(), parent.getWindowNo(), where, true);
}
boolean hasWhere = false;
String sql = "SELECT " + value + ", " + category + ", " + series + " FROM " + getFromClause();
if (!Util.isEmpty(where)) {
sql += " WHERE " + where;
hasWhere = true;
}
Date currentDate = Env.getContextAsDate(getCtx(), "#Date");
Date startDate = null;
Date endDate = null;
int scope = parent.getTimeScope();
int offset = getTimeOffset();
if (parent.isTimeSeries() && scope != 0) {
offset += -scope;
startDate = increment(currentDate, parent.getTimeUnit(), offset);
endDate = increment(startDate, parent.getTimeUnit(), scope);
}
if (startDate != null && endDate != null) {
sql += hasWhere ? " AND " : " WHERE ";
sql += category + ">=TRUNC(" + DB.TO_DATE(new Timestamp(startDate.getTime())) + ", '" + unit + "') AND ";
sql += category + "<=TRUNC(" + DB.TO_DATE(new Timestamp(endDate.getTime())) + ", '" + unit + "') ";
}
MRole role = MRole.getDefault(getCtx(), false);
sql = role.addAccessSQL(sql, null, true, false);
if (hasSeries)
sql += " GROUP BY " + series + ", " + category + " ORDER BY " + series + ", " + category;
else
sql += " GROUP BY " + category + " ORDER BY " + category;
log.log(Level.FINE, sql);
PreparedStatement pstmt = null;
ResultSet rs = null;
TimeSeries tseries = null;
Dataset dataset = parent.getDataset();
try {
pstmt = DB.prepareStatement(sql, null);
rs = pstmt.executeQuery();
while (rs.next()) {
String key = rs.getString(2);
String seriesName = rs.getString(3);
if (seriesName == null)
seriesName = getName();
String queryWhere = "";
if (hasWhere)
queryWhere += where + " AND ";
queryWhere += series + " = " + DB.TO_STRING(seriesName) + " AND " + category + " = ";
if (parent.isTimeSeries() && dataset instanceof TimeSeriesCollection) {
if (tseries == null || !tseries.getKey().equals(seriesName)) {
if (tseries != null)
((TimeSeriesCollection) dataset).addSeries(tseries);
tseries = new TimeSeries(seriesName);
}
Date date = rs.getDate(2);
RegularTimePeriod period = null;
if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Day))
period = new Day(date);
else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Week))
period = new Week(date);
else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Month))
period = new Month(date);
else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Quarter))
period = new Quarter(date);
else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Year))
period = new Year(date);
tseries.add(period, rs.getBigDecimal(1));
key = period.toString();
queryWhere += DB.TO_DATE(new Timestamp(date.getTime()));
} else {
queryWhere += DB.TO_STRING(key);
}
MQuery query = new MQuery(getAD_Table_ID());
String keyCol = MTable.get(getCtx(), getAD_Table_ID()).getKeyColumns()[0];
String whereClause = keyCol + " IN (SELECT " + getKeyColumn() + " FROM " + getFromClause() + " WHERE " + queryWhere + " )";
query.addRestriction(whereClause.toString());
query.setRecordCount(1);
HashMap<String, MQuery> map = parent.getQueries();
if (dataset instanceof DefaultPieDataset) {
((DefaultPieDataset) dataset).setValue(key, rs.getBigDecimal(1));
map.put(key, query);
} else if (dataset instanceof DefaultCategoryDataset) {
((DefaultCategoryDataset) dataset).addValue(rs.getBigDecimal(1), seriesName, key);
map.put(seriesName + "__" + key, query);
} else if (dataset instanceof TimeSeriesCollection) {
map.put(seriesName + "__" + key, query);
}
}
} catch (SQLException e) {
throw new DBException(e, sql);
} finally {
DB.close(rs, pstmt);
rs = null;
pstmt = null;
}
if (tseries != null)
((TimeSeriesCollection) dataset).addSeries(tseries);
}
use of org.jfree.data.time.Month in project jgnash by ccavanaugh.
the class MonthlyAccountBalanceChart method createTimeSeriesCollection.
private TimeSeriesCollection createTimeSeriesCollection(final Account account) {
List<LocalDate> dates = Collections.emptyList();
if (subAccountCheckBox.isSelected()) {
// Getting the dates to calculate
final LocalDate start = startDateField.getLocalDate().with(TemporalAdjusters.firstDayOfMonth());
final LocalDate stop = endDateField.getLocalDate().with(TemporalAdjusters.lastDayOfMonth());
dates = DateUtils.getLastDayOfTheMonths(start, stop);
TimeSeries t = new TimeSeries(rb.getString("Column.Month"), rb.getString("Column.Month"), rb.getString("Column.Balance"));
// For every month, calculate the total amount
for (LocalDate date : dates) {
final LocalDate d = date.with(TemporalAdjusters.lastDayOfMonth());
final LocalDate s = date.with(TemporalAdjusters.firstDayOfMonth());
// Get the total amount for the account and every sub accounts for the specified date
// and include it in the chart
t.add(new Month(DateUtils.asDate(date)), calculateTotal(s, d, account, account.getCurrencyNode()));
}
return new TimeSeriesCollection(t);
}
int count = account.getTransactionCount();
if (count > 0) {
LocalDate start = account.getTransactionAt(0).getLocalDate();
LocalDate stop = account.getTransactionAt(count - 1).getLocalDate();
dates = DateUtils.getLastDayOfTheMonths(start, stop);
}
TimeSeries t = new TimeSeries(rb.getString("Column.Month"), rb.getString("Column.Month"), rb.getString("Column.Balance"));
AccountType type = account.getAccountType();
for (LocalDate localDate : dates) {
// get balance for the whole month
LocalDate d = localDate.with(TemporalAdjusters.lastDayOfMonth());
LocalDate s = localDate.with(TemporalAdjusters.firstDayOfMonth());
BigDecimal balance = AccountBalanceDisplayManager.convertToSelectedBalanceMode(type, account.getBalance(s, d));
t.add(new Month(DateUtils.asDate(localDate)), balance);
}
return new TimeSeriesCollection(t);
}
use of org.jfree.data.time.Month in project jgnash by ccavanaugh.
the class MonthlyAccountBalanceChartCompare method createTimeSeriesCollection.
private TimeSeriesCollection createTimeSeriesCollection(final Account account, final Account a2) {
//always use this method
//if (subAccountCheckBox.isApproved()) {
// Getting the dates to calculate
LocalDate start = startDateField.getLocalDate().with(TemporalAdjusters.firstDayOfMonth());
LocalDate stop = endDateField.getLocalDate().with(TemporalAdjusters.lastDayOfMonth());
List<LocalDate> list = DateUtils.getLastDayOfTheMonths(start, stop);
TimeSeries t = new TimeSeries(rb.getString("Column.Month"), rb.getString("Column.Month"), rb.getString("Column.Balance"));
TimeSeries t2 = new TimeSeries(rb.getString("Column.Month"), rb.getString("Column.Month"), rb.getString("Column.Balance"));
// For every month, calculate the total amount
for (final LocalDate localDate : list) {
final LocalDate d = localDate.with(TemporalAdjusters.lastDayOfMonth());
final LocalDate s = localDate.with(TemporalAdjusters.firstDayOfMonth());
// Get the total amount for the account and every sub accounts
// for the specified date
//BigDecimal bd_TotalAmount = calculateTotal(s, d, account, account.getCurrencyNode());
BigDecimal bd_TotalAmount = calculateTotal(s, d, account, subAccountCheckBox.isSelected(), account.getCurrencyNode());
// Include it in the graph
t.add(new Month(DateUtils.asDate(localDate)), totalModulus(bd_TotalAmount, account.getAccountType()));
if (jcb_compare.isSelected()) {
bd_TotalAmount = calculateTotal(s, d, a2, subAccountCheckBox.isSelected(), account.getCurrencyNode());
t2.add(new Month(DateUtils.asDate(localDate)), totalModulus(bd_TotalAmount, a2.getAccountType()));
}
}
TimeSeriesCollection tsc = new TimeSeriesCollection();
tsc.addSeries(t);
if (jcb_compare.isSelected()) {
tsc.addSeries(t2);
}
return tsc;
/*
return new TimeSeriesCollection(t);
}
int count = account.getTransactionCount();
if (count > 0) {
Date start = account.getTransactionAt(0).getDate();
Date stop = account.getTransactionAt(count - 1).getDate();
list = DateUtils.getLastDayOfTheMonths(start, stop);
}
TimeSeries t = new TimeSeries(rb.getString("Column.Month"), rb.getString("Column.Month"), rb.getString("Column.Balance"));
AccountType type = account.getAccountType();
for (Date aList : list) {
// get balance for the whole month
Date d = DateUtils.getLastDayOfTheMonth(aList);
Date s = DateUtils.getFirstDayOfTheMonth(aList);
BigDecimal balance = AccountBalanceDisplayManager.convertToSelectedBalanceMode(type, account.getBalance(s, d));
t.add(new Month(aList), balance);
}
return new TimeSeriesCollection(t);
*/
}
use of org.jfree.data.time.Month in project jgnash by ccavanaugh.
the class RunningAccountBalanceChart method createTimeSeriesCollection.
private TimeSeriesCollection createTimeSeriesCollection(final Account account) {
if (subAccountCheckBox.isSelected()) {
LocalDate start = DateUtils.getFirstDayOfTheMonth(startDateField.getLocalDate());
LocalDate stop = DateUtils.getLastDayOfTheMonth(endDateField.getLocalDate());
List<LocalDate> list = DateUtils.getLastDayOfTheMonths(start, stop);
TimeSeries t = new TimeSeries(rb.getString("Column.Month"), rb.getString("Column.Month"), rb.getString("Column.Balance"));
// For every month, calculate the total amount
for (LocalDate date : list) {
LocalDate d = DateUtils.getLastDayOfTheMonth(date);
// Get the total amount for the account and every sub accounts
// for the specified date
BigDecimal bd_TotalAmount = calculateTotal(d, account, account.getCurrencyNode());
// Include it in the graph
t.add(new Month(DateUtils.asDate(date)), bd_TotalAmount);
}
return new TimeSeriesCollection(t);
}
List<LocalDate> list = Collections.emptyList();
int count = account.getTransactionCount();
if (count > 0) {
final LocalDate start = account.getTransactionAt(0).getLocalDate();
final LocalDate stop = account.getTransactionAt(count - 1).getLocalDate();
list = DateUtils.getLastDayOfTheMonths(start, stop);
}
TimeSeries t = new TimeSeries(rb.getString("Column.Month"), rb.getString("Column.Month"), rb.getString("Column.Balance"));
AccountType type = account.getAccountType();
for (final LocalDate date : list) {
// get balance for the whole month
LocalDate d = DateUtils.getLastDayOfTheMonth(date);
BigDecimal balance = AccountBalanceDisplayManager.convertToSelectedBalanceMode(type, account.getBalance(d));
t.add(new Month(DateUtils.asDate(date)), balance);
}
return new TimeSeriesCollection(t);
}
Aggregations