///////////////////////////////////////////////////////////////////////////// // // 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.fibu; import java.util.Date; import java.util.List; import java.util.StringTokenizer; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Predicate; import org.apache.commons.lang.Validate; import org.projectforge.core.BaseDao; import org.projectforge.core.BaseSearchFilter; import org.projectforge.core.QueryFilter; import org.projectforge.fibu.kost.Kost1DO; import org.projectforge.fibu.kost.Kost1Dao; import org.projectforge.user.PFUserDO; import org.projectforge.user.UserDao; import org.projectforge.user.UserRightId; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * Ein Mitarbeiter ist einem ProjectForge-Benutzer zugeordnet und trägt einige buchhalterische Angaben. * @author Kai Reinhard (k.reinhard@micromata.de) * */ public class EmployeeDao extends BaseDao<EmployeeDO> { public static final UserRightId USER_RIGHT_ID = UserRightId.FIBU_EMPLOYEE; private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(EmployeeDao.class); private static final String[] ADDITIONAL_SEARCH_FIELDS = new String[] { "user.firstname", "user.lastname", "user.description", "user.organization"}; private UserDao userDao; private Kost1Dao kost1Dao; public EmployeeDao() { super(EmployeeDO.class); userRightId = USER_RIGHT_ID; } @Override protected String[] getAdditionalSearchFields() { return ADDITIONAL_SEARCH_FIELDS; } @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) public EmployeeDO getByUserId(final Integer userId) { @SuppressWarnings("unchecked") final List<EmployeeDO> list = getHibernateTemplate().find("from EmployeeDO e where e.user.id = ?", userId); if (list != null && list.size() > 0) { return list.get(0); } return null; } /** * If more than one employee is found, null will be returned. * @param fullname Format: <last name>, <first name> */ @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) public EmployeeDO getByName(final String fullname) { final StringTokenizer tokenizer = new StringTokenizer(fullname, ","); if (tokenizer.countTokens() != 2) { log.error("EmployeeDao.getByName: Token '" + fullname + "' not supported."); } Validate.isTrue(tokenizer.countTokens() == 2); final String lastname = tokenizer.nextToken().trim(); final String firstname = tokenizer.nextToken().trim(); @SuppressWarnings("unchecked") final List<EmployeeDO> list = getHibernateTemplate().find("from EmployeeDO e where e.user.lastname = ? and e.user.firstname = ?", new Object[] { lastname, firstname}); // final List<EmployeeDO> list = getHibernateTemplate().find("from EmployeeDO e where e.user.lastname = ?", lastname); if (list != null && list.size() == 1) { return list.get(0); } return null; } /** * @param employee * @param userId If null, then user will be set to null; * @see BaseDao#getOrLoad(Integer) */ public void setUser(final EmployeeDO employee, final Integer userId) { final PFUserDO user = userDao.getOrLoad(userId); employee.setUser(user); } /** * @param employee * @param kost1Id If null, then kost1 will be set to null; * @see BaseDao#getOrLoad(Integer) */ public void setKost1(final EmployeeDO employee, final Integer kost1Id) { final Kost1DO kost1 = kost1Dao.getOrLoad(kost1Id); employee.setKost1(kost1); } @Override public List<EmployeeDO> getList(final BaseSearchFilter filter) { final EmployeeFilter myFilter; if (filter instanceof EmployeeFilter) { myFilter = (EmployeeFilter) filter; } else { myFilter = new EmployeeFilter(filter); } final QueryFilter queryFilter = new QueryFilter(myFilter); final List<EmployeeDO> list = getList(queryFilter); final Date now = new Date(); if (myFilter.isShowOnlyActiveEntries() == true) { CollectionUtils.filter(list, new Predicate() { public boolean evaluate(final Object object) { final EmployeeDO employee = (EmployeeDO) object; if (employee.getEintrittsDatum() != null && now.before(employee.getEintrittsDatum()) == true) { return false; } else if (employee.getAustrittsDatum() != null && now.after(employee.getAustrittsDatum()) == true) { return false; } return true; } }); } return list; } @Override protected void afterSaveOrModify(final EmployeeDO employee) { super.afterSaveOrModify(employee); userGroupCache.refreshEmployee(employee.getUserId()); } public void setUserDao(final UserDao userDao) { this.userDao = userDao; } public void setKost1Dao(final Kost1Dao kost1Dao) { this.kost1Dao = kost1Dao; } @Override public EmployeeDO newInstance() { return new EmployeeDO(); } }