Package org.projectforge.web.fibu

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

/////////////////////////////////////////////////////////////////////////////
//
// 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.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringEscapeUtils;
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.basic.Label;
import org.apache.wicket.markup.html.link.Link;
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.common.DateHelper;
import org.projectforge.common.NumberHelper;
import org.projectforge.core.Configuration;
import org.projectforge.core.CurrencyFormatter;
import org.projectforge.excel.ContentProvider;
import org.projectforge.excel.ExportColumn;
import org.projectforge.excel.I18nExportColumn;
import org.projectforge.excel.PropertyMapping;
import org.projectforge.export.DOListExcelExporter;
import org.projectforge.export.MyXlsContentProvider;
import org.projectforge.fibu.EingangsrechnungDO;
import org.projectforge.fibu.EingangsrechnungDao;
import org.projectforge.fibu.EingangsrechnungsStatistik;
import org.projectforge.fibu.KontoCache;
import org.projectforge.fibu.KontoDO;
import org.projectforge.fibu.RechnungFilter;
import org.projectforge.fibu.kost.KostZuweisungExport;
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.IListPageColumnsCreator;
import org.projectforge.web.wicket.ListPage;
import org.projectforge.web.wicket.ListSelectActionPanel;
import org.projectforge.web.wicket.RowCssClass;
import org.projectforge.web.wicket.components.ContentMenuEntryPanel;

@ListPage(editPage = EingangsrechnungEditPage.class)
public class EingangsrechnungListPage extends AbstractListPage<EingangsrechnungListForm, EingangsrechnungDao, EingangsrechnungDO> implements
IListPageColumnsCreator<EingangsrechnungDO>
{
  private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(EingangsrechnungListPage.class);

  private static final long serialVersionUID = 4417254962066648504L;

  @SpringBean(name = "eingangsrechnungDao")
  private EingangsrechnungDao eingangsrechnungDao;

  @SpringBean(name = "kontoCache")
  private KontoCache kontoCache;

  private EingangsrechnungsStatistik eingangsrechnungsStatistik;

  EingangsrechnungsStatistik getEingangsrechnungsStatistik()
  {
    if (eingangsrechnungsStatistik == null) {
      eingangsrechnungsStatistik = eingangsrechnungDao.buildStatistik(getList());
    }
    return eingangsrechnungsStatistik;
  }

  public EingangsrechnungListPage(final PageParameters parameters)
  {
    super(parameters, "fibu.eingangsrechnung");
  }

  public EingangsrechnungListPage(final ISelectCallerPage caller, final String selectProperty)
  {
    super(caller, selectProperty, "fibu.eingangsrechnung");
  }

  /**
   * Forces the statistics to be reloaded.
   * @see org.projectforge.web.wicket.AbstractListPage#refresh()
   */
  @Override
  public void refresh()
  {
    super.refresh();
    this.eingangsrechnungsStatistik = null;
  }

  @SuppressWarnings("serial")
  @Override
  public List<IColumn<EingangsrechnungDO, String>> createColumns(final WebPage returnToPage, final boolean sortable)
  {
    final List<IColumn<EingangsrechnungDO, String>> columns = new ArrayList<IColumn<EingangsrechnungDO, String>>();
    final CellItemListener<EingangsrechnungDO> cellItemListener = new CellItemListener<EingangsrechnungDO>() {
      public void populateItem(final Item<ICellPopulator<EingangsrechnungDO>> item, final String componentId,
          final IModel<EingangsrechnungDO> rowModel)
      {
        final EingangsrechnungDO eingangsrechnung = rowModel.getObject();
        appendCssClasses(item, eingangsrechnung.getId(), eingangsrechnung.isDeleted());
        if (eingangsrechnung.isDeleted() == true) {
          // Do nothing further
        } else if (eingangsrechnung.isUeberfaellig() == true) {
          appendCssClasses(item, RowCssClass.IMPORTANT_ROW);
        } else if (eingangsrechnung.isBezahlt() == false) {
          appendCssClasses(item, RowCssClass.BLUE);
        }
      }
    };
    columns.add(new CellItemListenerPropertyColumn<EingangsrechnungDO>(new Model<String>(getString("fibu.common.creditor")), getSortable(
        "kreditor", sortable), "kreditor", cellItemListener) {
      @SuppressWarnings({ "unchecked", "rawtypes"})
      @Override
      public void populateItem(final Item item, final String componentId, final IModel rowModel)
      {
        final EingangsrechnungDO eingangsrechnung = (EingangsrechnungDO) rowModel.getObject();
        String kreditor = StringEscapeUtils.escapeHtml(eingangsrechnung.getKreditor());
        if (form.getSearchFilter().isShowKostZuweisungStatus() == true) {
          final BigDecimal fehlBetrag = eingangsrechnung.getKostZuweisungFehlbetrag();
          if (NumberHelper.isNotZero(fehlBetrag) == true) {
            kreditor += " *** " + CurrencyFormatter.format(fehlBetrag) + " ***";
          }
        }
        final Label kreditorLabel = new Label(ListSelectActionPanel.LABEL_ID, kreditor);
        kreditorLabel.setEscapeModelStrings(false);
        item.add(new ListSelectActionPanel(componentId, rowModel, EingangsrechnungEditPage.class, eingangsrechnung.getId(), returnToPage,
            kreditorLabel));
        cellItemListener.populateItem(item, componentId, rowModel);
        addRowClick(item);
      }
    });
    columns.add(new CellItemListenerPropertyColumn<EingangsrechnungDO>(new Model<String>(getString("fibu.konto")), null, "konto",
        cellItemListener) {
      @SuppressWarnings({ "unchecked", "rawtypes"})
      @Override
      public void populateItem(final Item item, final String componentId, final IModel rowModel)
      {
        final EingangsrechnungDO rechnung = (EingangsrechnungDO) rowModel.getObject();
        final KontoDO konto = kontoCache.getKonto(rechnung.getKontoId());
        item.add(new Label(componentId, konto != null ? konto.formatKonto() : ""));
        cellItemListener.populateItem(item, componentId, rowModel);
      }
    });
    columns.add(new CellItemListenerPropertyColumn<EingangsrechnungDO>(getString("fibu.common.reference"),
        getSortable("referenz", sortable), "referenz", cellItemListener));
    columns.add(new CellItemListenerPropertyColumn<EingangsrechnungDO>(getString("fibu.rechnung.betreff"),
        getSortable("betreff", sortable), "betreff", cellItemListener));
    columns.add(new CellItemListenerPropertyColumn<EingangsrechnungDO>(getString("fibu.rechnung.datum.short"), getSortable("datum",
        sortable), "datum", cellItemListener));
    columns.add(new CellItemListenerPropertyColumn<EingangsrechnungDO>(getString("fibu.rechnung.faelligkeit.short"), getSortable(
        "faelligkeit", sortable), "faelligkeit", cellItemListener));
    columns.add(new CellItemListenerPropertyColumn<EingangsrechnungDO>(getString("fibu.rechnung.bezahlDatum.short"), getSortable(
        "bezahlDatum", sortable), "bezahlDatum", cellItemListener));
    columns.add(new CurrencyPropertyColumn<EingangsrechnungDO>(getString("fibu.common.netto"), getSortable("netSum", sortable), "netSum",
        cellItemListener));
    columns.add(new CurrencyPropertyColumn<EingangsrechnungDO>(getString("fibu.common.brutto"), getSortable("grossSum", sortable),
        "grossSum", cellItemListener));
    columns.add(new CellItemListenerPropertyColumn<EingangsrechnungDO>(new Model<String>(getString("comment")), getSortable("bemerkung",
        sortable), "bemerkung", cellItemListener));
    return columns;
  }

  @SuppressWarnings("serial")
  @Override
  protected void init()
  {
    dataTable = createDataTable(createColumns(this, true), "datum", SortOrder.DESCENDING);
    form.add(dataTable);
    addExcelExport(getString("fibu.common.creditor"), getString("fibu.eingangsrechnungen"));
    if (Configuration.getInstance().isCostConfigured() == true) {
      final ContentMenuEntryPanel exportExcelButton = new ContentMenuEntryPanel(getNewContentMenuChildId(), new Link<Object>("link") {
        @Override
        public void onClick()
        {
          exportExcelWithCostAssignments();
        };
      }, getString("fibu.rechnung.kostExcelExport")).setTooltip(getString("fibu.rechnung.kostExcelExport.tootlip"));
      addContentMenuEntry(exportExcelButton);
    }
  }

  /**
   * @see org.projectforge.web.wicket.AbstractListPage#createExcelExporter(java.lang.String)
   */
  @Override
  protected DOListExcelExporter createExcelExporter(final String filenameIdentifier)
  {
    return new DOListExcelExporter(filenameIdentifier) {
      /**
       * @see org.projectforge.excel.ExcelExporter#onBeforeSettingColumns(java.util.List)
       */
      @Override
      protected List<ExportColumn> onBeforeSettingColumns(final ContentProvider sheetProvider, final List<ExportColumn> columns)
      {
        final List<ExportColumn> sortedColumns = reorderColumns(columns, "kreditor", "konto", "kontoBezeichnung", "betreff", "datum",
            "faelligkeit", "bezahlDatum", "zahlBetrag");
        I18nExportColumn col = new I18nExportColumn("kontoBezeichnung", "fibu.konto.bezeichnung", MyXlsContentProvider.LENGTH_STD);
        sortedColumns.add(2, col);
        col = new I18nExportColumn("netSum", "fibu.common.netto");
        putCurrencyFormat(sheetProvider, col);
        sortedColumns.add(7, col);
        col = new I18nExportColumn("grossSum", "fibu.common.brutto");
        putCurrencyFormat(sheetProvider, col);
        sortedColumns.add(8, col);
        return sortedColumns;
      }

      /**
       * @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 ("konto".equals(field.getName()) == true) {
          Integer kontoNummer = null;
          final Integer kontoId = ((EingangsrechnungDO) entry).getKontoId();
          if (kontoId != null) {
            final KontoDO konto = kontoCache.getKonto(kontoId);
            if (konto != null) {
              kontoNummer = konto.getNummer();
            }
          }
          mapping.add(field.getName(), kontoNummer != null ? kontoNummer : "");
        } else {
          super.addMapping(mapping, entry, field);
        }
      }

      /**
       * @see org.projectforge.excel.ExcelExporter#addMappings(org.projectforge.excel.PropertyMapping, java.lang.Object)
       */
      @Override
      protected void addMappings(final PropertyMapping mapping, final Object entry)
      {
        final EingangsrechnungDO invoice = (EingangsrechnungDO) entry;
        String kontoBezeichnung = null;
        final Integer kontoId = ((EingangsrechnungDO) entry).getKontoId();
        if (kontoId != null) {
          final KontoDO konto = kontoCache.getKonto(kontoId);
          if (konto != null) {
            kontoBezeichnung = konto.getBezeichnung();
          }
        }
        mapping.add("kontoBezeichnung", kontoBezeichnung != null ? kontoBezeichnung : "");
        mapping.add("grossSum", invoice.getGrossSum());
        mapping.add("netSum", invoice.getNetSum());
      }
    };
  }

  protected void exportExcelWithCostAssignments()
  {
    refresh();
    final RechnungFilter filter = new RechnungFilter();
    final RechnungFilter src = form.getSearchFilter();
    filter.setYear(src.getYear());
    filter.setMonth(src.getMonth());
    final List<EingangsrechnungDO> rechnungen = eingangsrechnungDao.getList(filter);
    if (rechnungen == null || rechnungen.size() == 0) {
      // Nothing to export.
      form.addError("validation.error.nothingToExport");
      return;
    }
    final String filename = "ProjectForge-"
        + getString("fibu.common.creditor")
        + "-"
        + getString("menu.fibu.kost")
        + "_"
        + DateHelper.getDateAsFilenameSuffix(new Date())
        + ".xls";
    final byte[] xls = KostZuweisungExport.instance.exportRechnungen(rechnungen, getString("fibu.common.creditor"), kontoCache);
    if (xls == null || xls.length == 0) {
      log.error("Oups, xls has zero size. Filename: " + filename);
      return;
    }
    DownloadUtils.setDownloadTarget(xls, filename);
  }

  @Override
  protected EingangsrechnungListForm newListForm(final AbstractListPage< ? , ? , ? > parentPage)
  {
    return new EingangsrechnungListForm(this);
  }

  @Override
  protected EingangsrechnungDao getBaseDao()
  {
    return eingangsrechnungDao;
  }
}
TOP

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

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.