/////////////////////////////////////////////////////////////////////////////
//
// 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.math.BigDecimal;
import java.sql.Date;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.projectforge.core.CurrencyFormatter;
import org.projectforge.fibu.RechnungDao;
import org.projectforge.fibu.RechnungsPositionVO;
import org.projectforge.web.calendar.DateTimeFormatter;
import org.projectforge.web.wicket.AbstractEditPage;
import org.projectforge.web.wicket.AbstractSecuredPage;
import org.projectforge.web.wicket.WicketUtils;
/**
* This panel shows invoice positions including links to the corresponding order pages.
* @author Kai Reinhard (k.reinhard@micromata.de)
*
*/
public class InvoicePositionsPanel extends Panel
{
private static final long serialVersionUID = 4744964208090705536L;
@SpringBean(name = "rechnungDao")
private RechnungDao rechnungDao;
public InvoicePositionsPanel(final String id)
{
super(id);
}
@SuppressWarnings("serial")
public void init(final Set<RechnungsPositionVO> invoicePositionsByOrderPositionId)
{
final RepeatingView positionsRepeater = new RepeatingView("pos");
add(positionsRepeater);
if (invoicePositionsByOrderPositionId != null) {
final SortedSet<Integer> invoiceNumbers = new TreeSet<Integer>();
for (final RechnungsPositionVO invoicePosition : invoicePositionsByOrderPositionId) {
invoiceNumbers.add(invoicePosition.getRechnungNummer());
}
boolean first = true;
Integer invoiceId = null;
Date invoiceDate = null;
for (final Integer invoiceNumber : invoiceNumbers) {
BigDecimal netSum = BigDecimal.ZERO;
for (final RechnungsPositionVO invoicePosition : invoicePositionsByOrderPositionId) {
if (invoicePosition.getRechnungNummer() != invoiceNumber) {
// Invoice position doesn't match current invoice.
continue;
}
invoiceId = invoicePosition.getRechnungId();
invoiceDate = invoicePosition.getDate();
netSum = netSum.add(invoicePosition.getNettoSumme());
}
final WebMarkupContainer item = new WebMarkupContainer(positionsRepeater.newChildId());
positionsRepeater.add(item);
final Label separatorLabel = new Label("separator", ", ");
if (first == true) {
separatorLabel.setVisible(false); // Invisible for first entry.
first = false;
}
item.add(separatorLabel);
final String invoiceIdString = String.valueOf(invoiceId);
final Link<String> link = new Link<String>("link") {
@Override
public void onClick()
{
final PageParameters params = new PageParameters();
params.add(AbstractEditPage.PARAMETER_KEY_ID, invoiceIdString);
final RechnungEditPage page = new RechnungEditPage(params);
page.setReturnToPage((AbstractSecuredPage) getPage());
setResponsePage(page);
};
};
item.add(link);
final Component label = new Label("label", invoiceNumber);
item.add(label);
final String tooltip = DateTimeFormatter.instance().getFormattedDate(invoiceDate) + ": " + CurrencyFormatter.format(netSum);
if (rechnungDao.hasLoggedInUserSelectAccess(false) == true) {
link.add(new Label("label", invoiceNumber));
WicketUtils.addTooltip(link, tooltip);
label.setVisible(false);
} else {
link.setVisible(false);
WicketUtils.addTooltip(label, tooltip);
}
}
// final Iterator<RechnungsPositionVO> it = invoicePositionsByOrderPositionId.iterator();
// int orderNumber = -1;
// Link<String> link = null;
// RechnungsPositionVO previousOrderPosition = null;
// BigDecimal netSum = BigDecimal.ZERO;
// while (it.hasNext() == true) {
// final RechnungsPositionVO invoicePosition = it.next();
// if (orderNumber == -1) {
// orderNumber = invoicePosition.getRechnungNummer();
// }
// if (orderNumber == invoicePosition.getRechnungNummer().intValue()) {
// netSum = netSum.add(invoicePosition.getNettoSumme());
// } else {
// orderNumber = invoicePosition.getRechnungNummer();
// final WebMarkupContainer item = new WebMarkupContainer(positionsRepeater.newChildId());
// positionsRepeater.add(item);
// final Label separatorLabel = new Label("separator", ", ");
// if (previousOrderPosition == null) {
// separatorLabel.setVisible(false); // Invisible for first entry.
// }
// previousOrderPosition = invoicePosition;
// item.add(separatorLabel);
// link = new Link<String>("link") {
// @Override
// public void onClick()
// {
// final PageParameters params = new PageParameters();
// params.add(AbstractEditPage.PARAMETER_KEY_ID, String.valueOf(invoicePosition.getRechnungId()));
// final RechnungEditPage page = new RechnungEditPage(params);
// page.setReturnToPage((AbstractSecuredPage) getPage());
// setResponsePage(page);
// };
// };
// item.add(link);
// final String invoiceNumber = String.valueOf(invoicePosition.getRechnungNummer());
// final Component label = new Label("label", invoiceNumber);
// item.add(label);
// final String tooltip = DateTimeFormatter.instance().getFormattedDate(invoicePosition.getDate())
// + ": "
// + CurrencyFormatter.format(netSum);
// if (rechnungDao.hasLoggedInUserSelectAccess(false) == true) {
// link.add(new Label("label", invoiceNumber));
// WicketUtils.addTooltip(link, tooltip);
// label.setVisible(false);
// } else {
// link.setVisible(false);
// WicketUtils.addTooltip(label, tooltip);
// }
// netSum = invoicePosition.getNettoSumme();
// }
// }
}
}
}