///////////////////////////////////////////////////////////////////////////// // // 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.lang.reflect.Field; import java.util.ArrayList; import java.util.Date; import java.util.List; 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.html.form.SubmitLink; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.spring.injection.annot.SpringBean; import org.projectforge.common.DateHelper; import org.projectforge.core.PropertyInfo; import org.projectforge.excel.ContentProvider; import org.projectforge.excel.ExportColumn; import org.projectforge.excel.PropertyMapping; import org.projectforge.export.DOListExcelExporter; import org.projectforge.fibu.EmployeeSalaryDO; import org.projectforge.fibu.EmployeeSalaryDao; import org.projectforge.fibu.datev.EmployeeSalaryExportDao; 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.DownloadUtils; import org.projectforge.web.wicket.ListPage; import org.projectforge.web.wicket.ListSelectActionPanel; import org.projectforge.web.wicket.components.ContentMenuEntryPanel; @ListPage(editPage = EmployeeSalaryEditPage.class) public class EmployeeSalaryListPage extends AbstractListPage<EmployeeSalaryListForm, EmployeeSalaryDao, EmployeeSalaryDO> { private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(EmployeeSalaryListPage.class); private static final long serialVersionUID = -8406452960003792763L; @SpringBean(name = "employeeSalaryDao") private EmployeeSalaryDao employeeSalaryDao; @SpringBean(name = "employeeSalaryExportDao") private EmployeeSalaryExportDao employeeSalaryExportDao; public EmployeeSalaryListPage(final PageParameters parameters) { super(parameters, "fibu.employee.salary"); } public EmployeeSalaryListPage(final ISelectCallerPage caller, final String selectProperty) { super(caller, selectProperty, "fibu.employeeSalary"); } @SuppressWarnings("serial") public List<IColumn<EmployeeSalaryDO, String>> createColumns(final WebPage returnToPage, final boolean sortable) { final List<IColumn<EmployeeSalaryDO, String>> columns = new ArrayList<IColumn<EmployeeSalaryDO, String>>(); final CellItemListener<EmployeeSalaryDO> cellItemListener = new CellItemListener<EmployeeSalaryDO>() { public void populateItem(final Item<ICellPopulator<EmployeeSalaryDO>> item, final String componentId, final IModel<EmployeeSalaryDO> rowModel) { final EmployeeSalaryDO employeeSalary = rowModel.getObject(); appendCssClasses(item, employeeSalary.getId(), employeeSalary.isDeleted()); } }; columns.add(new CellItemListenerPropertyColumn<EmployeeSalaryDO>(getString("calendar.month"), getSortable("formattedYearAndMonth", sortable), "formattedYearAndMonth", cellItemListener) { /** * @see org.projectforge.web.wicket.CellItemListenerPropertyColumn#populateItem(org.apache.wicket.markup.repeater.Item, * java.lang.String, org.apache.wicket.model.IModel) */ @Override public void populateItem(final Item<ICellPopulator<EmployeeSalaryDO>> item, final String componentId, final IModel<EmployeeSalaryDO> rowModel) { final EmployeeSalaryDO employeeSalary = rowModel.getObject(); if (isSelectMode() == false) { item.add(new ListSelectActionPanel(componentId, rowModel, EmployeeSalaryEditPage.class, employeeSalary.getId(), returnToPage, employeeSalary.getFormattedYearAndMonth())); } else { item.add(new ListSelectActionPanel(componentId, rowModel, caller, selectProperty, employeeSalary.getId(), employeeSalary .getFormattedYearAndMonth())); } cellItemListener.populateItem(item, componentId, rowModel); addRowClick(item); } }); columns.add(new CellItemListenerPropertyColumn<EmployeeSalaryDO>(getString("name"), getSortable("employee.user.lastname", sortable), "employee.user.lastname", cellItemListener)); columns.add(new CellItemListenerPropertyColumn<EmployeeSalaryDO>(getString("firstName"), getSortable("employee.user.firstname", sortable), "employee.user.firstname", cellItemListener)); columns.add(new CellItemListenerPropertyColumn<EmployeeSalaryDO>(EmployeeSalaryDO.class, getSortable("type", sortable), "type", cellItemListener)); columns.add(new CurrencyPropertyColumn<EmployeeSalaryDO>(getString("fibu.employee.salary.bruttoMitAgAnteil"), getSortable( "bruttoMitAgAnteil", sortable), "bruttoMitAgAnteil", cellItemListener)); columns.add(new CellItemListenerPropertyColumn<EmployeeSalaryDO>(EmployeeSalaryDO.class, getSortable("comment", sortable), "comment", cellItemListener)); return columns; } protected void exportExcel() { refresh(); log.info("Exporting employee salaries as excel sheet for: " + DateHelper.formatMonth(form.getSearchFilter().getYear(), form.getSearchFilter().getMonth())); final List<EmployeeSalaryDO> list = getList(); if (list == null || list.size() == 0) { // Nothing to export. form.addError("validation.error.nothingToExport"); return; } final String filename = "ProjectForge-EmployeeSalaries_" + DateHelper.formatMonth(form.getSearchFilter().getYear(), form.getSearchFilter().getMonth()) + "_" + DateHelper.getDateAsFilenameSuffix(new Date()) + ".xls"; final byte[] xls = employeeSalaryExportDao.export(list); DownloadUtils.setDownloadTarget(xls, filename); } @Override protected void init() { final List<IColumn<EmployeeSalaryDO, String>> columns = createColumns(this, true); dataTable = createDataTable(columns, "employee.user.lastname", SortOrder.ASCENDING); form.add(dataTable); addExcelExport(getString("fibu.employee.salaries"), getString("fibu.employee.salaries")); { // Excel export @SuppressWarnings("serial") final SubmitLink excelExportLink = new SubmitLink(ContentMenuEntryPanel.LINK_ID, form) { @Override public void onSubmit() { if (form.getSearchFilter().getMonth() < 0 || form.getSearchFilter().getMonth() > 11) { form.addError("fibu.employee.salary.error.monthNotGiven"); return; } exportExcel(); } }; final ContentMenuEntryPanel excelExportButton = new ContentMenuEntryPanel(getNewContentMenuChildId(), excelExportLink, getString("fibu.rechnung.kostExcelExport")).setTooltip(getString("fibu.employee.salary.exportXls.tooltip")); addContentMenuEntry(excelExportButton); } } /** * @see org.projectforge.web.wicket.AbstractListPage#createExcelExporter(java.lang.String) */ @Override protected DOListExcelExporter createExcelExporter(final String filenameIdentifier) { return new DOListExcelExporter(filenameIdentifier) { /** * @see org.projectforge.export.MyExcelExporter#putFieldFormat(org.projectforge.excel.ContentProvider, java.lang.reflect.Field, * org.projectforge.core.PropertyInfo, org.projectforge.excel.ExportColumn) */ @Override public void putFieldFormat(final ContentProvider sheetProvider, final Field field, final PropertyInfo propInfo, final ExportColumn exportColumn) { if ("month".equals(field.getName()) == true) { sheetProvider.putFormat(exportColumn, "mmm"); exportColumn.setWidth(6); } else if ("year".equals(field.getName()) == true) { sheetProvider.putFormat(exportColumn, "#"); exportColumn.setWidth(6); } else { super.putFieldFormat(sheetProvider, field, propInfo, exportColumn); } } /** * @see org.projectforge.excel.ExcelExporter#addMapping(org.projectforge.excel.PropertyMapping, java.lang.Object, * java.lang.reflect.Field) */ @Override public void addMapping(final PropertyMapping mapping, final Object entry, final Field field) { if ("month".equals(field.getName()) == true) { final EmployeeSalaryDO salary = (EmployeeSalaryDO) entry; // Excel month starts with 1 instead of 0: mapping.add(field.getName(), salary.getMonth() + 1); } else { super.addMapping(mapping, entry, field); } } }; } @Override protected EmployeeSalaryListForm newListForm(final AbstractListPage< ? , ? , ? > parentPage) { return new EmployeeSalaryListForm(this); } @Override protected EmployeeSalaryDao getBaseDao() { return employeeSalaryDao; } protected EmployeeSalaryDao getEmployeeSalaryDao() { return employeeSalaryDao; } }