/*
* Copyright (C) 2011 4th Line GmbH, Switzerland
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.fourthline.konto.shared.query;
import org.fourthline.konto.client.report.LineReportType;
import org.fourthline.konto.shared.Constants;
import org.seamless.util.time.DateRange;
import org.fourthline.konto.shared.entity.Account;
import java.util.Date;
/**
* @author Christian Bauer
*/
public class LineReportCriteria extends ReportCriteria {
protected LineReportType type;
protected DateRange range;
protected LineReportOption options;
public LineReportCriteria() {
}
public LineReportCriteria(AccountsQueryCriteria[] accountSelection, String currencyCode, Date dayOfExchangeRate,
LineReportType type, DateRange range) {
this(accountSelection, currencyCode, dayOfExchangeRate, type, range, new LineReportOption());
}
public LineReportCriteria(AccountsQueryCriteria[] accountSelection, String currencyCode, Date dayOfExchangeRate,
LineReportType type, DateRange range, LineReportOption options) {
super(accountSelection, currencyCode, dayOfExchangeRate);
this.type = type;
this.range = range;
this.options = options;
setAccountSelection(getAccountSelection());
}
@Override
public void setAccountSelection(AccountsQueryCriteria[] accountSelection) {
// Default order/sorting for all line reports
for (AccountsQueryCriteria criteria : accountSelection) {
criteria.setOrderBy(Account.Property.groupName);
criteria.setSortAscending(true);
}
super.setAccountSelection(accountSelection);
}
public LineReportType getType() {
return type;
}
public void setType(LineReportType type) {
this.type = type;
}
public DateRange getRange() {
return range;
}
public void setRange(DateRange range) {
this.range = range;
}
public LineReportOption getOptions() {
return options;
}
public void setOptions(LineReportOption options) {
this.options = options;
}
public static LineReportCriteria valueOf(String s) {
try {
LineReportType type = LineReportType.valueOf(s.substring(0, 2));
String currencyCode = null;
if (s.contains("cc=")) {
try {
String cc = s.substring(s.indexOf("cc=") + 3);
currencyCode = cc.substring(0, cc.indexOf(";"));
} catch (Exception ex) {
// Ignore
}
}
if (currencyCode == null)
currencyCode = Constants.SYSTEM_BASE_CURRENCY_CODE;
AccountsQueryCriteria[] accountSelection = AccountsQueryCriteria.valueOf(s);
if (accountSelection == null)
accountSelection = type.getDefaultAccountSelection();
DateRange dateRange = DateRange.valueOf(s);
if (dateRange == null)
dateRange = new DateRange();
LineReportOption options = LineReportOption.valueOf(s);
if (options == null)
options = new LineReportOption();
return new LineReportCriteria(
accountSelection,
currencyCode,
new Date(), // Always use today for exchange rates
type,
dateRange,
options
);
} catch (Exception ex) {
ex.printStackTrace(System.err);
return null;
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getType()).append(";");
sb.append(AccountsQueryCriteria.toString(getAccountSelection()));
sb.append("cc=").append(getCurrencyCode()).append(";");
sb.append(getRange());
sb.append(getOptions());
return sb.toString();
}
}