Package org.projectforge.humanresources

Source Code of org.projectforge.humanresources.HRPlanningExport$MyContentProvider

/////////////////////////////////////////////////////////////////////////////
//
// 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.humanresources;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import org.apache.poi.hssf.util.HSSFColor;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.projectforge.excel.CellFormat;
import org.projectforge.excel.ContentProvider;
import org.projectforge.excel.ExportCell;
import org.projectforge.excel.ExportColumn;
import org.projectforge.excel.ExportRow;
import org.projectforge.excel.ExportSheet;
import org.projectforge.excel.ExportWorkbook;
import org.projectforge.excel.I18nExportColumn;
import org.projectforge.excel.PropertyMapping;
import org.projectforge.export.MyXlsContentProvider;
import org.projectforge.fibu.ProjektDao;
import org.projectforge.user.PFUserContext;
import org.projectforge.user.UserGroupCache;
import org.projectforge.web.calendar.DateTimeFormatter;

/**
* For excel exports.
*
* @author Mario Groß (m.gross@micromata.de)
*
*/
public class HRPlanningExport
{
  private class MyContentProvider extends MyXlsContentProvider
  {
    public MyContentProvider(final ExportWorkbook workbook)
    {
      super(workbook);
    }

    @Override
    public MyContentProvider updateRowStyle(final ExportRow row)
    {
      for (final ExportCell cell : row.getCells()) {
        final CellFormat format = cell.ensureAndGetCellFormat();
        format.setFillForegroundColor(HSSFColor.WHITE.index);
        switch (row.getRowNum()) {
          case 0:
            format.setFont(FONT_HEADER);
            break;
          case 1:
            format.setFont(FONT_NORMAL_BOLD);
            // alignment = CellStyle.ALIGN_CENTER;
            break;
          default:
            format.setFont(FONT_NORMAL);
            if (row.getRowNum() % 2 == 0) {
              format.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
            }
            break;
        }
      }
      return this;
    }

    @Override
    public ContentProvider newInstance()
    {
      return new MyContentProvider(this.workbook);
    }
  };

  private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(HRPlanningExport.class);

  final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.instance();

  @SpringBean(name = "userGroupCache")
  private UserGroupCache userGroupCache;

  @SpringBean(name = "projektDao")
  private ProjektDao projektDao;

  private enum Col
  {
    USER, PROJEKT, WEEK_OF_YEAR, PRIORITY, PROBABILITY, UNASSIGNEDHOURS, MONDAYHOURS, TUESDAYHOURS, WEDNESDAYHOURS, THURSDAYHOURS, FRIDAYHOURS, WEEKENDHOURS, DESCRIPTION, TOTAL_DURATION, WORKDAYS;
  }

  /**
   * Exports the filtered list as table with almost all fields. sheet 1 all fields sheet 2 Week to Users sheet 3 Week to Projects sheet 4
   * Projects to Users
   */
  public byte[] export(final List<HRPlanningDO> list, final Locale locale)
  {
    log.info("Exporting resourceplanning list.");
    ExportWorkbook xls = new ExportWorkbook();
    xls = exportCompleteList(list, xls, locale);
    xls = exportKWUsers(list, xls, locale);
    xls = exportKWProjects(list, xls, locale);
    xls = exportProjectUserView(list, xls);

    return xls.getAsByteArray();
  }

  public ExportWorkbook exportCompleteList(final List<HRPlanningDO> list, final ExportWorkbook xls, final Locale locale)
  {

    final ContentProvider contentProvider = new MyContentProvider(xls);

    // create a default Date format and currency column
    xls.setContentProvider(contentProvider);

    final String sheetTitle = PFUserContext.getLocalizedString("hr.plannings");
    final ExportSheet sheet = xls.addSheet(sheetTitle);
    sheet.createFreezePane(8, 1);

    final ExportColumn[] cols = new ExportColumn[] { //
        new I18nExportColumn(Col.USER, "timesheet.user", MyXlsContentProvider.LENGTH_USER),
        new I18nExportColumn(Col.PROJEKT, "fibu.projekt", MyXlsContentProvider.LENGTH_STD),
        new I18nExportColumn(Col.WEEK_OF_YEAR, "calendar.weekOfYearShortLabel", 4),
        new I18nExportColumn(Col.PRIORITY, "resourceplanning.priority", 8),
        new I18nExportColumn(Col.PROBABILITY, "resourceplanning.probability", 16),
        new I18nExportColumn(Col.UNASSIGNEDHOURS, "resourceplanning.unassignedHours", MyXlsContentProvider.LENGTH_STD),
        new I18nExportColumn(Col.MONDAYHOURS, "calendar.shortday.monday", 4),
        new I18nExportColumn(Col.TUESDAYHOURS, "calendar.shortday.tuesday", 4),
        new I18nExportColumn(Col.WEDNESDAYHOURS, "calendar.shortday.wednesday", 4),
        new I18nExportColumn(Col.THURSDAYHOURS, "calendar.shortday.thursday", 4),
        new I18nExportColumn(Col.FRIDAYHOURS, "calendar.shortday.friday", 4),
        new I18nExportColumn(Col.WEEKENDHOURS, "resourceplanning.weekend", MyXlsContentProvider.LENGTH_STD),
        new I18nExportColumn(Col.DESCRIPTION, "timesheet.description", MyXlsContentProvider.LENGTH_EXTRA_LONG)};

    // column property names
    sheet.setColumns(cols);

    final ContentProvider sheetProvider = sheet.getContentProvider();
    // Columnformats
    sheetProvider.putFormat(Col.UNASSIGNEDHOURS, "0.00");
    sheetProvider.putFormat(Col.MONDAYHOURS, "0.00");
    sheetProvider.putFormat(Col.TUESDAYHOURS, "0.00");
    sheetProvider.putFormat(Col.WEDNESDAYHOURS, "0.00");
    sheetProvider.putFormat(Col.THURSDAYHOURS, "0.00");
    sheetProvider.putFormat(Col.FRIDAYHOURS, "0.00");
    sheetProvider.putFormat(Col.WEEKENDHOURS, "0.00");

    final PropertyMapping mapping = new PropertyMapping();
    for (final HRPlanningDO planningSheet : list) {
      // final ProjektDO projekt = projektDao.getById(planningSheet.getProjektId());
      // final PFUserDO user = userGroupCache.getUser(planningSheet.getUserId());
      // mapping.add(Col.USER, user.getFullname());
      // final String projektName = projekt != null ? projekt.getName() : "";
      // mapping.add(Col.PROJEKT, projektName);
      // mapping.add(Col.WEEK_OF_YEAR, DateTimeFormatter.instance().getFormattedWeekOfYear(planningSheet.getStartTime()));
      // mapping.add(Col.PRIORITY, planningSheet.getPriority());
      // mapping.add(Col.PROBABILITY, planningSheet.getProbability());
      // mapping.add(Col.UNASSIGNEDHOURS, planningSheet.getUnassignedHours());
      // mapping.add(Col.MONDAYHOURS, planningSheet.getMondayHours());
      // mapping.add(Col.TUESDAYHOURS, planningSheet.getTuesdayHours());
      // mapping.add(Col.WEDNESDAYHOURS, planningSheet.getWednesdayHours());
      // mapping.add(Col.THURSDAYHOURS, planningSheet.getThursdayHours());
      // mapping.add(Col.FRIDAYHOURS, planningSheet.getFridayHours());
      // mapping.add(Col.WEEKENDHOURS, planningSheet.getWeekendHours());
      // mapping.add(Col.DESCRIPTION, planningSheet.getDescription());

      sheet.addRow(mapping.getMapping(), 0);
    }
    sheet.setZoom(3, 4); // 75%

    return xls;
  }

  /**
   * Exports a Calendarweek Overview to Excel
   * @param list
   * @return
   */
  public ExportWorkbook exportKWProjects(final List<HRPlanningDO> list, final ExportWorkbook xls, final Locale locale)
  {
    log.info("Exporting resourceplanning list to Calendar View.");
    final ContentProvider contentProvider = new MyContentProvider(xls);
    // create a default Date format and currency column
    xls.setContentProvider(contentProvider);

    final String sheetTitle = PFUserContext.getLocalizedString("exportKWProjects");
    final ExportSheet sheet = xls.addSheet(sheetTitle);
    sheet.createFreezePane(8, 1);

    final ExportColumn[] cols = new ExportColumn[] { new I18nExportColumn(Col.WEEK_OF_YEAR, "calendar.weekOfYearShortLabel", 12),
        new I18nExportColumn(Col.PROJEKT, "fibu.projekt", MyXlsContentProvider.LENGTH_STD),
        new I18nExportColumn(Col.TOTAL_DURATION, "timesheet.totalDuration", MyXlsContentProvider.LENGTH_STD),
        new I18nExportColumn(Col.WORKDAYS, "resourceplanning.workdays", MyXlsContentProvider.LENGTH_STD)};

    // column property names
    sheet.setColumns(cols);

    final ContentProvider sheetProvider = sheet.getContentProvider();
    // Columnformats
    sheetProvider.putFormat(Col.TOTAL_DURATION, "0.00");
    sheetProvider.putFormat(Col.WORKDAYS, "0.00");

    final PropertyMapping mapping = new PropertyMapping();

    // Ermittele Anzahl unterschiedlicher Projekte
    final List<String> projectNames = new ArrayList<String>();
    for (final HRPlanningDO planningSheet : list) {
      // final String projectName = planningSheet.getProjekt().getName();
      // boolean exists = false;
      // for (int i = 0; i < projectNames.size(); i++) {
      // if (projectName.equals(projectNames.get(i))) {
      // exists = true;
      // }
      // }
      // if (exists == false) {
      // projectNames.add(projectName);
      // }
    }

    // Get StartYear and EndYear from List
    // Date year = list.get(0).getStartTime();
    // Date startYear = year;
    // Date endYear = year;
    //
    // for (int i = 0; i < list.size(); i++) {
    // if (list.get(i).getStartTime().compareTo(startYear) < 0) {
    // startYear = list.get(i).getStartTime();
    // }
    // if (list.get(i).getStartTime().compareTo(endYear) > 0) {
    // endYear = list.get(i).getStartTime();
    // }
    // }

    final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy");

    // int syear = Integer.valueOf(simpleDateFormat.format(startYear));
    // int eyear = Integer.valueOf(simpleDateFormat.format(endYear));

    // for (int actualYear = syear; actualYear <= eyear; actualYear++) {
    // // Add actualYear row
    // // ExportRow r = sheet.addRow();
    // // r.setValues(String.valueOf(actualYear));
    //
    // // get maxKW for actual Year
    // Calendar cal = Calendar.getInstance(locale);
    // cal.set(actualYear, 11, 31);
    // int maxKW = Integer.valueOf(dateTimeFormatter.getFormattedDate(cal.getTime(), DateTimeFormatter.I18N_KEY_WEEK_OF_YEAR_FORMAT));
    //
    // // Durchlaufe KalenderWochen
    // for (int kw = 1; kw <= maxKW; kw++) {
    //
    // List<ExportObject> exportObjects = new LinkedList<ExportObject>();
    //
    // for (HRPlanningDO planningSheet : list) {
    // ExportObject exportObj = new ExportObject();
    //
    // // If kw=kw && year = actualyear
    // if ((Integer.valueOf(dateTimeFormatter.getFormattedDate(planningSheet.getStartTime(),
    // DateTimeFormatter.I18N_KEY_WEEK_OF_YEAR_FORMAT)) == kw)
    // && (getStartYearfromDO(planningSheet)) == actualYear) {
    // exportObj.setProjectName(planningSheet.getProjekt().getName());
    // exportObj.setUserName(planningSheet.getUser().getFullname());
    // exportObj.setTotalDuration(planningSheet.getTotalDuration());
    // exportObjects.add(exportObj);
    // }
    //
    // }
    // boolean rowAdded = false;
    // for (String projectName : projectNames) {
    // BigDecimal totalDur = new BigDecimal(0);
    // for (ExportObject obj : exportObjects) {
    // if (obj.getProjectName().equals(projectName)) {
    // totalDur = totalDur.add(obj.getTotalDuration());
    // }
    // }
    // mapping.add(Col.WEEK_OF_YEAR, String.valueOf(actualYear) + " - " + String.valueOf(kw));
    // mapping.add(Col.PROJEKT, projectName);
    // mapping.add(Col.TOTAL_DURATION, totalDur);
    // // Workdays = totalDur / 8
    // mapping.add(Col.WORKDAYS, totalDur.divide(new BigDecimal(8)));
    // if (totalDur.equals(new BigDecimal(0)) == false) {
    // sheet.addRow(mapping.getMapping(), 0);
    // rowAdded = true;
    // }
    // }
    //
    // if (rowAdded == false) {
    // mapping.add(Col.WEEK_OF_YEAR, String.valueOf(actualYear) + " - " + String.valueOf(kw));
    // mapping.add(Col.PROJEKT, " - ");
    // mapping.add(Col.TOTAL_DURATION, " - ");
    // mapping.add(Col.WORKDAYS, " - ");
    // sheet.addRow(mapping.getMapping(), 0);
    // }
    // }
    // }
    sheet.setZoom(3, 4); // 75%

    return xls;
  }

  public ExportWorkbook exportKWUsers(final List<HRPlanningDO> list, final ExportWorkbook xls, final Locale locale)
  {
    log.info("Exporting resourceplanning list to Calendar View.");

    final ContentProvider contentProvider = new MyContentProvider(xls);
    // create a default Date format and currency column
    xls.setContentProvider(contentProvider);

    final String sheetTitle = PFUserContext.getLocalizedString("exportKWUsers");
    final ExportSheet sheet = xls.addSheet(sheetTitle);
    sheet.createFreezePane(8, 1);

    final ExportColumn[] cols = new ExportColumn[] { new I18nExportColumn(Col.WEEK_OF_YEAR, "calendar.weekOfYearShortLabel", 12),
        new I18nExportColumn(Col.USER, "timesheet.user", MyXlsContentProvider.LENGTH_USER),
        new I18nExportColumn(Col.TOTAL_DURATION, "timesheet.totalDuration", MyXlsContentProvider.LENGTH_STD),
        new I18nExportColumn(Col.WORKDAYS, "resourceplanning.workdays", MyXlsContentProvider.LENGTH_STD)};

    // column property names
    sheet.setColumns(cols);

    final ContentProvider sheetProvider = sheet.getContentProvider();
    // Columnformats
    sheetProvider.putFormat(Col.TOTAL_DURATION, "0.00");
    sheetProvider.putFormat(Col.WORKDAYS, "0.00");

    final PropertyMapping mapping = new PropertyMapping();

    // Ermittele Anzahl unterschiedlicher User
    final List<String> userNames = new ArrayList<String>();
    for (final HRPlanningDO planningSheet : list) {
      final String userName = planningSheet.getUser().getFullname();
      boolean exists = false;
      for (int i = 0; i < userNames.size(); i++) {
        if (userName.equals(userNames.get(i))) {
          exists = true;
        }
      }
      if (exists == false) {
        userNames.add(userName);
      }
    }

    // Get StartYear and EndYear
    // Date year = list.get(0).getStartTime();
    // Date startYear = year;
    // Date endYear = year;
    //
    // for (int i = 0; i < list.size(); i++) {
    // if (list.get(i).getStartTime().compareTo(startYear) < 0) {
    // startYear = list.get(i).getStartTime();
    // }
    // if (list.get(i).getStartTime().compareTo(endYear) > 0) {
    // endYear = list.get(i).getStartTime();
    // }
    // }

    final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy");

    // int syear = Integer.valueOf(simpleDateFormat.format(startYear));
    // int eyear = Integer.valueOf(simpleDateFormat.format(endYear));
    //
    // for (int actualYear = syear; actualYear <= eyear; actualYear++) {
    // // Add actualYear row
    // // ExportRow r = sheet.addRow();
    // // r.setValues(String.valueOf(actualYear));
    //
    // // get maxKW for actual Year
    // Calendar cal = Calendar.getInstance(locale);
    // cal.set(actualYear, 11, 31);
    // int maxKW = Integer.valueOf(dateTimeFormatter.getFormattedDate(cal.getTime(), DateTimeFormatter.I18N_KEY_WEEK_OF_YEAR_FORMAT));
    //
    // // Durchlaufe KalenderWochen
    // for (int kw = 1; kw <= maxKW; kw++) {
    //
    // List<ExportObject> exportObjects = new LinkedList<ExportObject>();
    //
    // for (HRPlanningDO planningSheet : list) {
    // ExportObject exportObj = new ExportObject();
    //
    // // If kw=kw && year = actualyear
    // if ((Integer.valueOf(dateTimeFormatter.getFormattedDate(planningSheet.getStartTime(),
    // DateTimeFormatter.I18N_KEY_WEEK_OF_YEAR_FORMAT)) == kw)
    // && (getStartYearfromDO(planningSheet)) == actualYear) {
    // exportObj.setProjectName(planningSheet.getProjekt().getName());
    // exportObj.setUserName(planningSheet.getUser().getFullname());
    // exportObj.setTotalDuration(planningSheet.getTotalDuration());
    // exportObjects.add(exportObj);
    // }

    // }

    // boolean rowAdded = false;
    // for (String userName : userNames) {
    // BigDecimal totalDur = new BigDecimal(0);
    // for (ExportObject obj : exportObjects) {
    // if (obj.getUserName().equals(userName)) {
    // totalDur = totalDur.add(obj.getTotalDuration());
    // }
    // }
    // mapping.add(Col.WEEK_OF_YEAR, String.valueOf(actualYear) + " - " + String.valueOf(kw));
    // mapping.add(Col.USER, userName);
    // mapping.add(Col.TOTAL_DURATION, totalDur);
    // // Workdays = totalDur / 8
    // mapping.add(Col.WORKDAYS, totalDur.divide(new BigDecimal(8)));
    // if (totalDur.equals(new BigDecimal(0)) == false) {
    // sheet.addRow(mapping.getMapping(), 0);
    // rowAdded = true;
    // }
    //
    // }
    // if (rowAdded == false) {
    // mapping.add(Col.WEEK_OF_YEAR, String.valueOf(actualYear) + " - " + String.valueOf(kw));
    // mapping.add(Col.USER, " - ");
    // mapping.add(Col.TOTAL_DURATION, " - ");
    // // Workdays = totalDur / 8
    // mapping.add(Col.WORKDAYS, " - ");
    // sheet.addRow(mapping.getMapping(), 0);
    // }
    //
    // }
    // }
    // sheet.setZoom(3, 4); // 75%

    return xls;
  }

  /**
   * Exports a Project to User View to excel
   * @param list
   * @return
   */
  public ExportWorkbook exportProjectUserView(final List<HRPlanningDO> list, final ExportWorkbook xls)
  {
    log.info("Exporting resourceplanning list to Calendar View.");
    final ContentProvider contentProvider = new MyContentProvider(xls);
    // create a default Date format and currency column
    xls.setContentProvider(contentProvider);

    final String sheetTitle = PFUserContext.getLocalizedString("exportProjectsUsers");
    final ExportSheet sheet = xls.addSheet(sheetTitle);
    sheet.createFreezePane(8, 1);

    // Ermittele Anzahl unterschiedlicher Projekte
    final List<String> projectNames = new ArrayList<String>();
    // for (HRPlanningDO planningSheet : list) {
    // String projectName = planningSheet.getProjekt().getName();
    // boolean exists = false;
    // for (int i = 0; i < projectNames.size(); i++) {
    // if (projectName.equals(projectNames.get(i))) {
    // exists = true;
    // }
    // }
    // if (exists == false) {
    // projectNames.add(projectName);
    // }
    // }
    //
    // // Ermittele Anzahl unterschiedlicher User
    // List<String> userNames = new ArrayList<String>();
    // for (HRPlanningDO planningSheet : list) {
    // String userName = planningSheet.getUser().getFullname();
    // boolean exists = false;
    // for (int i = 0; i < userNames.size(); i++) {
    // if (userName.equals(userNames.get(i))) {
    // exists = true;
    // }
    // }
    // if (exists == false) {
    // userNames.add(userName);
    // }
    // }
    //
    // // Erzeuge Columns
    // int sizeOfTable = 1 + projectNames.size();
    // ExportColumn[] cols = new ExportColumn[sizeOfTable];
    // // Erste Spalte Usernames
    // cols[0] = new I18nExportColumn(Col.USER, "timesheet.user", XlsContentProvider.LENGTH_USER);
    // // Restliche Spalten Projektnamen
    // for (int i = 1; i < sizeOfTable; i++) {
    // cols[i] = new ExportColumn(projectNames.get(i - 1), projectNames.get(i - 1), XlsContentProvider.LENGTH_STD);
    // }
    //
    // // column property names
    // sheet.setColumns(cols);
    //
    // final ContentProvider sheetProvider = sheet.getContentProvider();
    //
    // // Columnformats
    // for (String prjName : projectNames) {
    // sheetProvider.putFormat(prjName, "0.00");
    // }
    //
    // for (String userName : userNames) {
    //
    // PropertyMapping mapping = new PropertyMapping();
    //
    // // Map zum Speichern der Gesamtdauer der einzelnen Projekte des Users
    // Map<String, BigDecimal> projectsDurations = new HashMap<String, BigDecimal>();
    // // initialisiere Map
    // for (String prjName : projectNames) {
    // projectsDurations.put(prjName, new BigDecimal(0));
    // }
    //
    // for (HRPlanningDO planningSheet : list) {
    // if (planningSheet.getUser().getFullname().equals(userName)) {
    // for (String prjName : projectNames) {
    // if (planningSheet.getProjekt().getName().equals(prjName)) {
    // // addiere Duration auf Project
    // BigDecimal duration = projectsDurations.get(prjName);
    // duration = duration.add(planningSheet.getTotalDuration());
    // projectsDurations.put(prjName, duration);
    // }
    // }
    // }
    // }
    //
    // // Fülle Row
    // mapping.add(Col.USER, userName);
    // for (String prjName : projectNames) {
    // mapping.add(prjName, projectsDurations.get(prjName).toString());
    // }
    //
    // sheet.addRow(mapping.getMapping(), 0);
    // }

    sheet.setZoom(3, 4); // 75%

    return xls;
  }

  public int getStartYearfromDO(final HRPlanningDO sheet)
  {
    final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy");
    final Integer year = Integer.valueOf(simpleDateFormat.format(sheet.getWeek()));

    return year;
  }
}
TOP

Related Classes of org.projectforge.humanresources.HRPlanningExport$MyContentProvider

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.