///////////////////////////////////////////////////////////////////////////// // // 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.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.spring.injection.annot.SpringBean; import org.projectforge.fibu.KontoDO; import org.projectforge.fibu.KostFormatter; import org.projectforge.fibu.kost.AccountingConfig; import org.projectforge.fibu.kost.BuchungssatzDO; import org.projectforge.fibu.kost.BuchungssatzDao; import org.projectforge.fibu.kost.BusinessAssessment; import org.projectforge.fibu.kost.BusinessAssessmentRow; import org.projectforge.fibu.kost.Kost1DO; import org.projectforge.fibu.kost.Kost2DO; import org.projectforge.fibu.kost.reporting.Report; import org.projectforge.fibu.kost.reporting.ReportStorage; import org.projectforge.web.wicket.AbstractListPage; import org.projectforge.web.wicket.CellItemListener; import org.projectforge.web.wicket.CellItemListenerPropertyColumn; import org.projectforge.web.wicket.CurrencyPropertyColumn; import org.projectforge.web.wicket.IListPageColumnsCreator; import org.projectforge.web.wicket.ListPage; import org.projectforge.web.wicket.ListSelectActionPanel; import org.projectforge.web.wicket.WicketUtils; import org.springframework.util.CollectionUtils; @ListPage(editPage = AccountingRecordEditPage.class) public class AccountingRecordListPage extends AbstractListPage<AccountingRecordListForm, BuchungssatzDao, BuchungssatzDO> implements IListPageColumnsCreator<BuchungssatzDO> { private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(AccountingRecordListPage.class); private static final long serialVersionUID = -34213362189153025L; private static final String PARAM_KEY_REPORT_ID = "reportId"; private static final String PARAM_KEY_BUSINESS_ASSESSMENT_ROW_ID = "businessAssessmentRowId"; @SpringBean(name = "buchungssatzDao") private BuchungssatzDao buchungssatzDao; protected BusinessAssessment businessAssessment; protected String reportId; private String businessAssessmentRowId; private Report report; /** * Gets the page parameters for calling the list page only for displaying accounting records of the given report. * @param reportId The id of the report of the ReportStorage of ReportObjectivesPage. */ public static PageParameters getPageParameters(final String reportId) { return getPageParameters(reportId, null); } /** * Gets the page parameters for calling the list page only for displaying accounting records of the given report. * @param reportId The id of the report of the ReportStorage of ReportObjectivesPage. * @param businessAssessmentRowId Display only records concerning the given row of the business assessment. */ public static PageParameters getPageParameters(final String reportId, final String businessAssessmentRowNo) { final PageParameters params = new PageParameters(); params.add(PARAM_KEY_REPORT_ID, reportId); if (businessAssessmentRowNo != null) { params.add(PARAM_KEY_BUSINESS_ASSESSMENT_ROW_ID, businessAssessmentRowNo); } return params; } public AccountingRecordListPage(final PageParameters parameters) { super(parameters, "fibu.buchungssatz"); } @Override protected void setup() { reportId = WicketUtils.getAsString(getPageParameters(), PARAM_KEY_REPORT_ID); businessAssessmentRowId = WicketUtils.getAsString(getPageParameters(), PARAM_KEY_BUSINESS_ASSESSMENT_ROW_ID); if (reportId != null) { storeFilter = false; } } @Override protected void init() { final List<IColumn<BuchungssatzDO, String>> columns = createColumns(this, true); dataTable = createDataTable(columns, "formattedSatzNummer", SortOrder.ASCENDING); form.add(dataTable); } @SuppressWarnings("serial") @Override public List<IColumn<BuchungssatzDO, String>> createColumns(final WebPage returnToPage, final boolean sortable) { final List<IColumn<BuchungssatzDO, String>> columns = new ArrayList<IColumn<BuchungssatzDO, String>>(); final CellItemListener<BuchungssatzDO> cellItemListener = new CellItemListener<BuchungssatzDO>() { public void populateItem(final Item<ICellPopulator<BuchungssatzDO>> item, final String componentId, final IModel<BuchungssatzDO> rowModel) { final BuchungssatzDO satz = rowModel.getObject(); appendCssClasses(item, satz.getId(), satz.isDeleted()); } }; columns.add(new CellItemListenerPropertyColumn<BuchungssatzDO>(new Model<String>(getString("fibu.buchungssatz.satznr")), "formattedSatzNummer", "formattedSatzNummer", cellItemListener) { @SuppressWarnings({ "unchecked", "rawtypes"}) @Override public void populateItem(final Item item, final String componentId, final IModel rowModel) { final BuchungssatzDO satz = (BuchungssatzDO) rowModel.getObject(); item.add(new ListSelectActionPanel(componentId, rowModel, AccountingRecordEditPage.class, satz.getId(), AccountingRecordListPage.this, String.valueOf(satz.getFormattedSatzNummer()))); cellItemListener.populateItem(item, componentId, rowModel); addRowClick(item); } }); columns.add(new CurrencyPropertyColumn<BuchungssatzDO>(getString("fibu.common.betrag"), "betrag", "betrag", cellItemListener)); columns .add(new CellItemListenerPropertyColumn<BuchungssatzDO>(getString("fibu.buchungssatz.beleg"), "beleg", "beleg", cellItemListener)); columns.add(new CellItemListenerPropertyColumn<BuchungssatzDO>(new Model<String>(getString("fibu.kost1")), getSortable( "kost1.shortDisplayName", sortable), "kost1.shortDisplayName", cellItemListener) { @Override public String getTooltip(final BuchungssatzDO satz) { final Kost1DO kost1 = satz != null ? satz.getKost1() : null; if (kost1 == null) { return null; } else { return KostFormatter.formatToolTip(kost1); } } }); columns.add(new CellItemListenerPropertyColumn<BuchungssatzDO>(new Model<String>(getString("fibu.kost2")), getSortable( "kost2.shortDisplayName", sortable), "kost2.shortDisplayName", cellItemListener) { @Override public String getTooltip(final BuchungssatzDO satz) { final Kost2DO kost2 = satz != null ? satz.getKost2() : null; if (kost2 == null) { return null; } else { return KostFormatter.formatToolTip(kost2); } } }); columns.add(new CellItemListenerPropertyColumn<BuchungssatzDO>(new Model<String>(getString("fibu.buchungssatz.konto")), getSortable( "konto.shortDisplayName", sortable), "konto.shortDisplayName", cellItemListener) { @Override public String getTooltip(final BuchungssatzDO satz) { final KontoDO konto = satz != null ? satz.getKonto() : null; if (konto == null) { return null; } else { return konto.getBezeichnung(); } } }); columns.add(new CellItemListenerPropertyColumn<BuchungssatzDO>(new Model<String>(getString("fibu.buchungssatz.gegenKonto")), getSortable("gegenKonto.shortDisplayName", sortable), "gegenKonto.shortDisplayName", cellItemListener) { @Override public String getTooltip(final BuchungssatzDO satz) { final KontoDO gegenKonto = satz != null ? satz.getGegenKonto() : null; if (gegenKonto == null) { return null; } else { return gegenKonto.getBezeichnung(); } } }); columns.add(new CellItemListenerPropertyColumn<BuchungssatzDO>(getString("finance.accountingRecord.dc"), "sh", "sh", cellItemListener)); columns.add(new CellItemListenerPropertyColumn<BuchungssatzDO>(getString("fibu.buchungssatz.text"), "text", "text", cellItemListener)); columns.add(new CellItemListenerPropertyColumn<BuchungssatzDO>(getString("comment"), "comment", "comment", cellItemListener)); return columns; } @Override public void refresh() { super.refresh(); form.refresh(); } @Override protected AccountingRecordListForm newListForm(final AbstractListPage< ? , ? , ? > parentPage) { return new AccountingRecordListForm(this); } @Override protected BuchungssatzDao getBaseDao() { return buchungssatzDao; } /** * @see org.projectforge.web.wicket.AbstractListPage#buildList() */ @Override protected List<BuchungssatzDO> buildList() { List<BuchungssatzDO> list = null; if (StringUtils.isNotEmpty(reportId) == true) { final ReportStorage reportStorage = (ReportStorage) getUserPrefEntry(ReportObjectivesPage.KEY_REPORT_STORAGE); if (reportStorage != null) { report = reportStorage.findById(this.reportId); if (report != null) { if (this.businessAssessmentRowId != null) { final BusinessAssessmentRow row = report.getBusinessAssessment().getRow(businessAssessmentRowId); if (row != null) { list = row.getAccountRecords(); } else { log.info("Business assessment row " + businessAssessmentRowId + " not found for report with id '" + reportId + "' in existing ReportStorage."); } } else { list = report.getBuchungssaetze(); } } else { log.info("Report with id '" + reportId + "' not found in existing ReportStorage."); } } else { log.info("Report with id '" + reportId + "' not found. ReportStorage does not exist."); } } else { list = super.buildList(); } if (CollectionUtils.isEmpty(list) == true) { this.businessAssessment = null; } else { this.businessAssessment = new BusinessAssessment(AccountingConfig.getInstance().getBusinessAssessmentConfig()); this.businessAssessment.setAccountRecords(list); } return list; } /** * @return the businessAssessment */ BusinessAssessment getBusinessAssessment() { return businessAssessment; } }