Package org.projectforge.web.fibu

Source Code of org.projectforge.web.fibu.EmployeeSalaryListPage

/////////////////////////////////////////////////////////////////////////////
//
// 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;
  }
}
TOP

Related Classes of org.projectforge.web.fibu.EmployeeSalaryListPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.