/* * 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.client.report.view; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.DockLayoutPanel; import com.google.gwt.user.client.ui.ListBox; import org.fourthline.konto.client.bundle.Bundle; import org.fourthline.konto.client.report.LineReportType; import org.fourthline.konto.shared.Constants; import org.seamless.gwt.component.client.widget.AutocompleteDateTextBox; import org.seamless.gwt.component.client.widget.DateRangeSelect; import org.seamless.util.time.DateFormat; import org.seamless.util.time.DateRange; import org.fourthline.konto.shared.query.LineReportCriteria; import org.fourthline.konto.shared.query.LineReportOption; import javax.inject.Inject; import java.util.Date; /** * @author Christian Bauer */ public class ReportSelectViewImpl extends Composite implements ReportSelectView { interface UI extends UiBinder<DockLayoutPanel, ReportSelectViewImpl> { } interface Style extends CssResource { } private static UI ui = GWT.create(UI.class); @UiField(provided = true) final Bundle bundle; @UiField Style style; @UiField ListBox typeListBox; @UiField AutocompleteDateTextBox dateBox; @UiField(provided = true) final DateRangeSelect dateRangeSelect; @UiField CheckBox showDetailedCheckBox; @UiField CheckBox showDetailedAccountsCheckBox; @UiField CheckBox showExchangeCheckBox; @UiField CheckBox showZeroBalancesCheckBox; @UiField ListBox currencyListBox; @UiField Button printButton; @UiField Button bookmarkButton; Presenter presenter; LineReportCriteria criteria; @Inject public ReportSelectViewImpl(Bundle bundle, DateRangeSelect dateRangeSelect) { this.bundle = bundle; this.dateRangeSelect = dateRangeSelect; initWidget(ui.createAndBindUi(this)); typeListBox.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { presenter.onReportTypeSelected(LineReportType.values()[typeListBox.getSelectedIndex()]); } }); dateBox.addValueChangeHandler(new ValueChangeHandler<Date>() { @Override public void onValueChange(ValueChangeEvent<Date> event) { DateRange dateRange = new DateRange(null, event.getValue() != null ? event.getValue() : new Date()); if (presenter != null) presenter.onDateRangeUpdated(dateRange); } }); dateRangeSelect.addValueChangeHandler(new ValueChangeHandler<DateRange>() { @Override public void onValueChange(ValueChangeEvent<DateRange> event) { if (presenter != null) presenter.onDateRangeUpdated(event.getValue()); } }); showDetailedCheckBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { showDetailedAccountsCheckBox.setEnabled(event.getValue()); if (presenter != null) presenter.onReportOptionsUpdated(getReportOptions()); } }); showDetailedAccountsCheckBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if (presenter != null) presenter.onReportOptionsUpdated(getReportOptions()); } }); showExchangeCheckBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if (presenter != null) presenter.onReportOptionsUpdated(getReportOptions()); } }); showZeroBalancesCheckBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if (presenter != null) presenter.onReportOptionsUpdated(getReportOptions()); } }); currencyListBox.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { presenter.onCurrencySelected(currencyListBox.getSelectedItemText()); } }); initCurrencyListBox(); initTypeListBox(); } @Override public void setPresenter(Presenter presenter) { this.presenter = presenter; dateBox.reset(); dateRangeSelect.reset(); } @Override public void setDateFormat(DateFormat dateFormat) { dateBox.setDateFormat(dateFormat); dateRangeSelect.setDateFormat(dateFormat); } @Override public void setCriteria(LineReportCriteria criteria) { this.criteria = criteria; applyCriteria(); } @Override public LineReportType getReportType() { return LineReportType.values()[typeListBox.getSelectedIndex()]; } @Override public DateRange getDateRange(LineReportType type) { if (ReportSelectView.Option.USE_DATE_RANGE.in(type.getReportSelectOptions())) { return dateRangeSelect.getValue() != null ? dateRangeSelect.getValue() : new DateRange(); } else { return new DateRange(null, dateBox.getValue() != null ? dateBox.getValue() : new Date()); } } @Override public LineReportOption getReportOptions() { return new LineReportOption( showDetailedCheckBox.getValue(), showDetailedAccountsCheckBox.getValue(), showExchangeCheckBox.getValue(), showZeroBalancesCheckBox.getValue() ); } @Override public void setCurrencyCodes(String[] currencyCodes, String selectedCurrencyCode) { currencyListBox.clear(); if (currencyCodes != null) for (int i = 0; i < currencyCodes.length; i++) { String currencyCode = currencyCodes[i]; currencyListBox.addItem(currencyCode); if (currencyCode.equals(selectedCurrencyCode)) currencyListBox.setSelectedIndex(i); } } @Override public String getCurrencyCode() { return currencyListBox.getSelectedItemText(); } @UiHandler("printButton") void onClickPrint(ClickEvent e) { if (presenter != null) { presenter.onPrint(); } } @UiHandler("bookmarkButton") void onClickBookmark(ClickEvent e) { if (presenter != null) { presenter.onBookmark(); } } protected void applyCriteria() { initTypeListBox(criteria.getType()); if (ReportSelectView.Option.USE_DATE_RANGE.in(criteria.getType().getReportSelectOptions())) { dateRangeSelect.setVisible(true); dateRangeSelect.setValue(criteria.getRange()); dateBox.setVisible(false); dateBox.setValue(null); } else { dateRangeSelect.setVisible(false); dateRangeSelect.setValue(null); dateBox.setVisible(true); dateBox.setValue(criteria.getRange().getEnd()); } if (ReportSelectView.Option.ENABLE_ENTRY_DETAILS.in(criteria.getType().getReportSelectOptions())) { showDetailedCheckBox.setEnabled(true); } else { showDetailedCheckBox.setEnabled(false); } showDetailedCheckBox.setValue(criteria.getOptions().isEntryDetails()); showDetailedAccountsCheckBox.setEnabled(criteria.getOptions().isEntryDetails()); showDetailedAccountsCheckBox.setValue(criteria.getOptions().isEntryAccounts()); showExchangeCheckBox.setValue(criteria.getOptions().isExchangeRates()); showZeroBalancesCheckBox.setValue(criteria.getOptions().isZeroBalances()); } protected void initTypeListBox() { initTypeListBox(null); } protected void initTypeListBox(LineReportType selected) { typeListBox.clear(); for (LineReportType t : LineReportType.values()) { typeListBox.addItem(t.getLabel()); } for (int i = 0; i < LineReportType.values().length; i++) { LineReportType rt = LineReportType.values()[i]; if (rt.equals(selected)) { typeListBox.setSelectedIndex(i); break; } } } protected void initCurrencyListBox() { setCurrencyCodes(new String[]{Constants.SYSTEM_BASE_CURRENCY_CODE}, null); } }