///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition 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 General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.web.fibu; import java.util.Date; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.upload.FileUploadField; import org.apache.wicket.markup.html.form.validation.IFormValidator; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.util.lang.Bytes; import org.projectforge.common.DateHolder; import org.projectforge.web.wicket.AbstractStandardForm; import org.projectforge.web.wicket.components.DatePanel; import org.projectforge.web.wicket.components.DatePanelSettings; import org.projectforge.web.wicket.components.SingleButtonPanel; import org.projectforge.web.wicket.flowlayout.DivPanel; import org.projectforge.web.wicket.flowlayout.DivTextPanel; import org.projectforge.web.wicket.flowlayout.FieldsetPanel; import org.projectforge.web.wicket.flowlayout.FileUploadPanel; public class ReportObjectivesForm extends AbstractStandardForm<ReportObjectivesFilter, ReportObjectivesPage> { private static final long serialVersionUID = -2262096357903710703L; private static final String KEY_REPORT_FILTER = "ReportObjectivesForm:filter"; protected FileUploadField fileUploadField; protected ReportObjectivesFilter filter; private ReportObjectivesPanel reportObjectivesPanel; private DatePanel fromDatePanel, toDatePanel; private final FormComponent< ? >[] dependentFormComponents = new FormComponent[2]; public ReportObjectivesForm(final ReportObjectivesPage parentPage) { super(parentPage); initUpload(Bytes.megabytes(10)); } @SuppressWarnings("serial") @Override protected void init() { super.init(); add(new IFormValidator() { @Override public FormComponent< ? >[] getDependentFormComponents() { return dependentFormComponents; } @Override public void validate(final Form< ? > form) { final Date fromDate = fromDatePanel.getConvertedInput(); final Date toDate = toDatePanel.getConvertedInput(); if (toDate != null && fromDate != null && fromDate.after(toDate) == true) { toDatePanel.getDateField().error(getString("fibu.buchungssatz.error.invalidTimeperiod")); } } }); filter = getFilter(); gridBuilder.newGridPanel(); { final FieldsetPanel fs = new FieldsetPanel(gridBuilder.getPanel(), getString("file"), "*.xml") { @Override public boolean isVisible() { return parentPage.getReportStorage() == null; } }; fileUploadField = new FileUploadField(FileUploadPanel.WICKET_ID); fs.add(new FileUploadPanel(fs.newChildId(), fileUploadField)); fs.add(new SingleButtonPanel(fs.newChildId(), new Button(SingleButtonPanel.WICKET_ID, new Model<String>("import")) { @Override public final void onSubmit() { parentPage.importReportObjectivs(); } }, getString("import"), SingleButtonPanel.NORMAL)); } { final FieldsetPanel fs = new FieldsetPanel(gridBuilder.getPanel(), getString("timePeriod")) { @Override public boolean isVisible() { return reportObjectivesPanel.isVisible(); } }; fs.add(fromDatePanel = new DatePanel(fs.newChildId(), new PropertyModel<Date>(filter, "fromDate"), DatePanelSettings.get() .withRequired(true))); dependentFormComponents[0] = fromDatePanel; fs.add(new DivTextPanel(fs.newChildId(), " - ")); fs.add(toDatePanel = new DatePanel(fs.newChildId(), new PropertyModel<Date>(filter, "toDate"), DatePanelSettings.get())); dependentFormComponents[1] = toDatePanel; final Button createReportButton = new Button(SingleButtonPanel.WICKET_ID, new Model<String>("createReport")) { @Override public final void onSubmit() { parentPage.createReport(); } }; setDefaultButton(createReportButton); fs.add(new SingleButtonPanel(fs.newChildId(), createReportButton, getString("fibu.kost.reporting.createReport"), SingleButtonPanel.DEFAULT_SUBMIT)); fs.add(new SingleButtonPanel(fs.newChildId(), new Button(SingleButtonPanel.WICKET_ID, new Model<String>("clear")) { @Override public final void onSubmit() { parentPage.clear(); } }, getString("fibu.kost.reporting.clearStorage"), SingleButtonPanel.RESET)); } final DivPanel panel = gridBuilder.getPanel(); panel.add(reportObjectivesPanel = new ReportObjectivesPanel(panel.newChildId(), parentPage)); } protected ReportObjectivesFilter getFilter() { if (filter != null) { return filter; } filter = (ReportObjectivesFilter) parentPage.getUserPrefEntry(KEY_REPORT_FILTER); if (filter != null) { return filter; } filter = new ReportObjectivesFilter(); final DateHolder day = new DateHolder(); day.setBeginOfYear(); filter.setFromDate(day.getDate()); day.setEndOfYear(); filter.setToDate(day.getDate()); parentPage.putUserPrefEntry(KEY_REPORT_FILTER, filter, true); return filter; } }