///////////////////////////////////////////////////////////////////////////// // // 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.util.ArrayList; import java.util.Calendar; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.spring.injection.annot.SpringBean; import org.projectforge.calendar.DayHolder; import org.projectforge.fibu.ProjektDO; import org.projectforge.fibu.ProjektDao; import org.projectforge.fibu.RechnungDO; import org.projectforge.fibu.RechnungDao; import org.projectforge.fibu.RechnungStatus; import org.projectforge.fibu.RechnungTyp; import org.projectforge.fibu.RechnungsPositionDO; import org.projectforge.web.wicket.AbstractEditPage; import org.projectforge.web.wicket.AbstractSecuredBasePage; import org.projectforge.web.wicket.EditPage; @EditPage(defaultReturnPage = RechnungListPage.class) public class RechnungEditPage extends AbstractEditPage<RechnungDO, RechnungEditForm, RechnungDao> implements ISelectCallerPage { private static final long serialVersionUID = 2561721641251015056L; private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(RechnungEditPage.class); @SpringBean(name = "rechnungDao") private RechnungDao rechnungDao; @SpringBean(name = "projektDao") private ProjektDao projektDao; public RechnungEditPage(final PageParameters parameters) { super(parameters, "fibu.rechnung"); init(); if (isNew() == true) { final DayHolder day = new DayHolder(); getData().setDatum(day.getSQLDate()); getData().setStatus(RechnungStatus.GESTELLT); getData().setTyp(RechnungTyp.RECHNUNG); } getData().recalculate(); // Muss immer gemacht werden, damit das Zahlungsziel in Tagen berechnet wird. } @Override public AbstractSecuredBasePage onSaveOrUpdate() { if (isNew() == true && getData().getNummer() == null && getData().getTyp() != RechnungTyp.GUTSCHRIFTSANZEIGE_DURCH_KUNDEN) { getData().setNummer(rechnungDao.getNextNumber(getData())); } return null; } @Override protected RechnungDao getBaseDao() { return rechnungDao; } @Override protected RechnungEditForm newEditForm(final AbstractEditPage< ? , ? , ? > parentPage, final RechnungDO data) { return new RechnungEditForm(this, data); } @Override protected Logger getLogger() { return log; } /** * @see org.projectforge.web.wicket.AbstractEditPage#cloneData() */ @Override protected void cloneData() { super.cloneData(); final RechnungDO rechnung = getData(); rechnung.setNummer(null); final Integer zahlungsZielInTagen = rechnung.getZahlungsZielInTagen(); final DayHolder day = new DayHolder(); rechnung.setDatum(day.getSQLDate()); if (zahlungsZielInTagen != null) { day.add(Calendar.DAY_OF_MONTH, zahlungsZielInTagen); } rechnung.setFaelligkeit(day.getSQLDate()); rechnung.setZahlBetrag(null); rechnung.setBezahlDatum(null); rechnung.setStatus(RechnungStatus.GESTELLT); final List<RechnungsPositionDO> positionen = getData().getPositionen(); if (positionen != null) { rechnung.setPositionen(new ArrayList<RechnungsPositionDO>()); for (final RechnungsPositionDO origPosition : positionen) { final RechnungsPositionDO position = (RechnungsPositionDO) origPosition.newClone(); rechnung.addPosition(position); } } form.refresh(); } public void cancelSelection(final String property) { // Do nothing. } public void select(final String property, final Object selectedValue) { if ("projektId".equals(property) == true) { rechnungDao.setProjekt(getData(), (Integer) selectedValue); form.projektSelectPanel.getTextField().modelChanged(); if (getData().getProjektId() != null && getData().getProjektId() >= 0 && getData().getKundeId() == null && StringUtils.isBlank(getData().getKundeText()) == true) { // User has selected a project and the kunde is not set: final ProjektDO projekt = projektDao.getById(getData().getProjektId()); if (projekt != null) { rechnungDao.setKunde(getData(), projekt.getKundeId()); form.customerSelectPanel.getTextField().modelChanged(); } } } else if ("kundeId".equals(property) == true) { rechnungDao.setKunde(getData(), (Integer) selectedValue); form.customerSelectPanel.getTextField().modelChanged(); } else { log.error("Property '" + property + "' not supported for selection."); } } public void unselect(final String property) { if ("projektId".equals(property) == true) { getData().setProjekt(null); form.projektSelectPanel.getTextField().modelChanged(); } else if ("kundeId".equals(property) == true) { getData().setKunde(null); form.customerSelectPanel.getTextField().modelChanged(); } else { log.error("Property '" + property + "' not supported for selection."); } } }