///////////////////////////////////////////////////////////////////////////// // // 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 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.access.OperationType; import org.projectforge.calendar.DayHolder; import org.projectforge.common.NumberHelper; import org.projectforge.core.ModificationStatus; import org.projectforge.fibu.AuftragDO; import org.projectforge.fibu.AuftragDao; import org.projectforge.fibu.AuftragsPositionDO; import org.projectforge.fibu.ProjektDO; import org.projectforge.fibu.ProjektDao; import org.projectforge.user.ProjectForgeGroup; import org.projectforge.web.wicket.AbstractEditPage; import org.projectforge.web.wicket.AbstractSecuredBasePage; import org.projectforge.web.wicket.EditPage; import org.projectforge.web.wicket.WicketUtils; @EditPage(defaultReturnPage = AuftragListPage.class) public class AuftragEditPage extends AbstractEditPage<AuftragDO, AuftragEditForm, AuftragDao> implements ISelectCallerPage { private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(AuftragEditPage.class); private static final long serialVersionUID = -8192471994161712577L; @SpringBean(name = "auftragDao") private AuftragDao auftragDao; @SpringBean(name = "projektDao") private ProjektDao projektDao; public AuftragEditPage(final PageParameters parameters) { super(parameters, "fibu.auftrag"); init(); if (isNew() == true && getData().getContactPerson() == null) { auftragDao.setContactPerson(getData(), getUser().getId()); } } @Override protected AuftragDao getBaseDao() { return auftragDao; } @Override protected AuftragEditForm newEditForm(final AbstractEditPage< ? , ? , ? > parentPage, final AuftragDO data) { return new AuftragEditForm(this, data); } /** * @see org.projectforge.web.fibu.ISelectCallerPage#select(java.lang.String, java.lang.Integer) */ public void select(final String property, final Object selectedValue) { if ("projektId".equals(property) == true) { auftragDao.setProjekt(getData(), (Integer) selectedValue); form.projektSelectPanel.getTextField().modelChanged(); if (getData().getProjektId() != null && getData().getProjektId() >= 0 && getData().getKundeId() == null) { if (StringUtils.isBlank(form.kundeSelectPanel.getKundeTextInput()) == true) { // User has selected a project and the kunde is not set: final ProjektDO projekt = projektDao.getById(getData().getProjektId()); if (projekt != null) { auftragDao.setKunde(getData(), projekt.getKundeId()); form.kundeSelectPanel.getTextField().modelChanged(); } } } } else if ("kundeId".equals(property) == true) { auftragDao.setKunde(getData(), (Integer) selectedValue); form.kundeSelectPanel.getTextField().modelChanged(); } else if ("contactPersonId".equals(property) == true) { auftragDao.setContactPerson(getData(), (Integer) selectedValue); setSendEMailNotification(); } else if (property.startsWith("taskId:") == true) { final Short number = NumberHelper.parseShort(property.substring(property.indexOf(':') + 1)); final AuftragsPositionDO pos = getData().getPosition(number); auftragDao.setTask(pos, (Integer) selectedValue); } else { log.error("Property '" + property + "' not supported for selection."); } } private void setSendEMailNotification() { if (accessChecker.userEqualsToContextUser(getData().getContactPerson()) == true) form.setSendEMailNotification(false); else form.setSendEMailNotification(true); } /** * @see org.projectforge.web.fibu.ISelectCallerPage#unselect(java.lang.String) */ 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.kundeSelectPanel.getTextField().modelChanged(); } else if ("contactPersonId".equals(property) == true) { getData().setContactPerson(null); setSendEMailNotification(); } else if (property.startsWith("taskId:") == true) { final Short number = NumberHelper.parseShort(property.substring(property.indexOf(':') + 1)); final AuftragsPositionDO pos = getData().getPosition(number); pos.setTask(null); } else { log.error("Property '" + property + "' not supported for selection."); } } /** * @see org.projectforge.web.fibu.ISelectCallerPage#cancelSelection(java.lang.String) */ public void cancelSelection(final String property) { // Do nothing. } @Override public AbstractSecuredBasePage onSaveOrUpdate() { if (getData().getNummer() == null) { getData().setNummer(auftragDao.getNextNumber(getData())); } if (getData().getKunde() != null) { getData().setKundeText(null); } return null; } @Override protected void onPreEdit() { if (getData().getId() == null) { if (getData().getAngebotsDatum() == null) { final DayHolder today = new DayHolder(); getData().setAngebotsDatum(new java.sql.Date(today.getTimeInMillis())); } if (getData().getContactPersonId() == null && accessChecker.isLoggedInUserMemberOfGroup(ProjectForgeGroup.PROJECT_MANAGER) == true) { auftragDao.setContactPerson(getData(), getUser().getId()); form.setSendEMailNotification(false); } } else { setSendEMailNotification(); } getData().recalculate(); } @Override public AbstractSecuredBasePage afterSave() { if (form.isSendEMailNotification() == false) { return null; } sendNotificationIfRequired(OperationType.INSERT); return null; } @Override public AbstractSecuredBasePage afterUpdate(final ModificationStatus modified) { if (form.isSendEMailNotification() == false) { return null; } if (modified == ModificationStatus.MAJOR) { sendNotificationIfRequired(OperationType.UPDATE); } return null; } private void sendNotificationIfRequired(final OperationType operationType) { final String url = getPageAsLink(WicketUtils.getEditPageParameters(getData().getId())); auftragDao.sendNotificationIfRequired(getData(), operationType, url); } @Override protected Logger getLogger() { return log; } }