org.kuali.kfs.module.tem.service.impl.TemProfileServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.kuali.kfs.module.tem.service.impl.TemProfileServiceImpl.java

Source

/*
 * The Kuali Financial System, a comprehensive financial management system for higher education.
 * 
 * Copyright 2005-2014 The Kuali Foundation
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program 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 Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.kuali.kfs.module.tem.service.impl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.kuali.kfs.module.tem.TemConstants;
import org.kuali.kfs.module.tem.TemPropertyConstants;
import org.kuali.kfs.module.tem.TemPropertyConstants.TemProfileProperties;
import org.kuali.kfs.module.tem.businessobject.TemProfile;
import org.kuali.kfs.module.tem.businessobject.TemProfileAccount;
import org.kuali.kfs.module.tem.businessobject.TemProfileAddress;
import org.kuali.kfs.module.tem.businessobject.TemProfileArranger;
import org.kuali.kfs.module.tem.service.TemProfileService;
import org.kuali.kfs.pdp.businessobject.PayeeACHAccount;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.rice.core.api.util.ConcreteKeyValue;
import org.kuali.rice.core.api.util.KeyValue;
import org.kuali.rice.kim.api.identity.Person;
import org.kuali.rice.kim.api.identity.PersonService;
import org.kuali.rice.krad.service.BusinessObjectService;
import org.kuali.rice.krad.util.ObjectUtils;

public class TemProfileServiceImpl implements TemProfileService {

    private BusinessObjectService businessObjectService;
    private PersonService personService;

    /**
     * @see org.kuali.kfs.module.tem.service.TemProfileService#findTemProfileByPrincipalId(java.lang.String)
     */
    @Override
    public TemProfile findTemProfileByPrincipalId(String principalId) {
        Map<String, String> criteria = new HashMap<String, String>(1);
        criteria.put(TemProfileProperties.PRINCIPAL_ID, principalId);
        return findTemProfile(criteria);
    }

    /**
     * @see org.kuali.kfs.module.tem.service.TemProfileService#findTemProfileById(java.lang.Integer)
     */
    @Override
    public TemProfile findTemProfileById(Integer profileId) {
        Map<String, String> criteria = new HashMap<String, String>(1);
        criteria.put(TemProfileProperties.PROFILE_ID, String.valueOf(profileId));
        return findTemProfile(criteria);
    }

    /**
     * @see org.kuali.kfs.module.tem.service.TemProfileService#findTemProfile(java.util.Map)
     */
    @Override
    public TemProfile findTemProfile(Map<String, String> criteria) {
        Collection<TemProfile> profiles = getBusinessObjectService().findMatching(TemProfile.class, criteria);
        if (ObjectUtils.isNotNull(profiles) && profiles.size() > 0) {
            return profiles.iterator().next();
        }
        return null;
    }

    /**
     * @see org.kuali.kfs.module.tem.service.TemProfileService#getAddressFromProfile(org.kuali.kfs.module.tem.businessobject.TemProfile, org.kuali.kfs.module.tem.businessobject.TemProfileAddress)
     */
    @Override
    public TemProfileAddress getAddressFromProfile(TemProfile profile, TemProfileAddress defaultAddress) {

        if (ObjectUtils.isNull(defaultAddress)) {
            defaultAddress = new TemProfileAddress();
        }

        if (!StringUtils.isEmpty(profile.getPrincipalId())) {
            Person person = getPersonService().getPerson(profile.getPrincipalId());
            TemProfileAddress kimAddress = createTemProfileAddressFromPerson(person, profile.getProfileId(),
                    defaultAddress);
            return kimAddress;
        }
        return defaultAddress;
    }

    /**
     * @see org.kuali.kfs.module.tem.service.TemProfileService#createTemProfileAddressFromPerson(org.kuali.rice.kim.bo.Person, java.lang.Integer, org.kuali.kfs.module.tem.businessobject.TemProfileAddress)
     */
    @Override
    public TemProfileAddress createTemProfileAddressFromPerson(Person person, Integer profileId,
            TemProfileAddress defaultAddress) {
        defaultAddress.setProfileId(profileId);
        defaultAddress.setStreetAddressLine1(StringUtils.upperCase(person.getAddressLine1()));
        defaultAddress.setStreetAddressLine2(StringUtils.upperCase(person.getAddressLine2()));
        defaultAddress.setCityName(StringUtils.upperCase(person.getAddressCity()));
        defaultAddress.setStateCode(StringUtils.upperCase(person.getAddressStateProvinceCode()));
        defaultAddress.setZipCode(person.getAddressPostalCode());
        defaultAddress.setCountryCode(StringUtils.upperCase(person.getAddressCountryCode()));
        return defaultAddress;
    }

    /**
     * @see org.kuali.kfs.module.tem.service.TemProfileService#getAllActiveTemProfile()
     */
    @Override
    public List<TemProfile> getAllActiveTemProfile() {
        Map<String, Object> criteria = new HashMap<String, Object>(3);
        criteria.put(KFSPropertyConstants.ACTIVE, true);
        List<TemProfile> profiles = (List<TemProfile>) getBusinessObjectService().findMatching(TemProfile.class,
                criteria);
        return profiles;
    }

    /**
     * @see org.kuali.kfs.module.tem.service.TemProfileService#updateACHAccountInfo(org.kuali.kfs.module.tem.businessobject.TemProfile)
     */
    @Override
    public void updateACHAccountInfo(TemProfile profile) {

        //set defaults
        profile.setAchSignUp("No");
        profile.setAchTransactionType("None");

        if (TemConstants.EMP_TRAVELER_TYP_CD.equals(profile.getTravelerTypeCode())
                && profile.getEmployeeId() != null) {
            Map<String, Object> fieldValues = new HashMap<String, Object>();
            fieldValues.put(KFSPropertyConstants.PAYEE_ID_NUMBER, profile.getEmployeeId());
            List<PayeeACHAccount> accounts = (List<PayeeACHAccount>) getBusinessObjectService()
                    .findMatching(PayeeACHAccount.class, fieldValues);

            //if there are any ACH accounts matching the employee Id lookup, use the first one for display
            if (!accounts.isEmpty()) {
                profile.setAchSignUp("Yes");
                profile.setAchTransactionType(accounts.get(0).getAchTransactionType());
            }
        }
    }

    /**
     * @see org.kuali.kfs.module.tem.service.TemProfileService#isProfileNonEmploye(org.kuali.kfs.module.tem.businessobject.TemProfile)
     */
    @Override
    public boolean isProfileNonEmploye(TemProfile profile) {
        return !StringUtils.isBlank(profile.getTravelerTypeCode())
                && profile.getTravelerTypeCode().equals(TemConstants.NONEMP_TRAVELER_TYP_CD);
    }

    /**
     * @see org.kuali.kfs.module.tem.service.TemProfileService#hasActiveArrangers(org.kuali.kfs.module.tem.businessobject.TemProfile)
     */
    @Override
    public boolean hasActiveArrangers(TemProfile profile) {
        for (TemProfileArranger arranger : profile.getArrangers()) {
            if (arranger.isActive()) {
                return true;
            }
        }
        return false;
    }

    /**
     * @see org.kuali.kfs.module.tem.service.TemProfileService#findTemProfileByEmployeeId(java.lang.String)
     */
    @Override
    public TemProfile findTemProfileByEmployeeId(String employeeId) {
        final Map<String, String> criteria = new HashMap<String, String>(1);
        criteria.put(TemProfileProperties.EMPLOYEE_ID, employeeId);
        return findTemProfile(criteria);
    }

    /**
     * @see org.kuali.kfs.module.tem.service.TemProfileService#findTemProfileByCustomerNumber(java.lang.String)
     */
    @Override
    public TemProfile findTemProfileByCustomerNumber(String customerNumber) {
        final Map<String, String> criteria = new HashMap<String, String>(1);
        criteria.put(TemProfileProperties.CUSTOMER_NUMBER, customerNumber);
        return findTemProfile(criteria);
    }

    /**
     * Easily overridable to add more values
     * @see org.kuali.kfs.module.tem.service.TemProfileService#getGenderKeyValues()
     */
    @Override
    public List<KeyValue> getGenderKeyValues() {
        List<KeyValue> keyValues = new ArrayList<KeyValue>();
        keyValues.add(new ConcreteKeyValue("M", "Male"));
        keyValues.add(new ConcreteKeyValue("F", "Female"));
        return keyValues;
    }

    /**
     * Checks the business object service to see if the profile account exists
     * @see org.kuali.kfs.module.tem.service.TemProfileService#doesProfileAccountExist(org.kuali.kfs.module.tem.businessobject.TemProfileAccount, org.kuali.kfs.module.tem.businessobject.TemProfile)
     */
    @Override
    public boolean doesProfileAccountExist(TemProfileAccount account, TemProfile skipProfile) {
        Map<String, Object> fieldValues = new HashMap<String, Object>();
        fieldValues.put(KFSPropertyConstants.ACCOUNT_NUMBER, account.getAccountNumber());
        fieldValues.put(TemPropertyConstants.CREDIT_CARD_AGENCY_CODE, account.getCreditCardOrAgencyCode());
        fieldValues.put(KFSPropertyConstants.ACTIVE, Boolean.TRUE);
        final Collection<TemProfileAccount> profileAccounts = getBusinessObjectService()
                .findMatching(TemProfileAccount.class, fieldValues);
        if (skipProfile != null && skipProfile.getId() != null) {
            List<TemProfileAccount> otherFolksAccounts = new ArrayList<TemProfileAccount>();
            for (TemProfileAccount profileAccount : profileAccounts) { // loop through all accounts to exhaust any iterator
                if (profileAccount.getProfileId().equals(skipProfile.getId())) {
                    otherFolksAccounts.add(profileAccount);
                }
            }
            return otherFolksAccounts.size() > 0;
        }

        //otherwise, just return the size of the profileAccounts
        return profileAccounts.size() > 0;
    }

    /**
     * Gets the personService attribute.
     * @return Returns the personService.
     */
    public PersonService getPersonService() {
        return personService;
    }

    /**
     * Sets the personService attribute value.
     * @param personService The personService to set.
     */
    public void setPersonService(PersonService personService) {
        this.personService = personService;
    }

    /**
     * Gets the businessObjectService attribute.
     * @return Returns the businessObjectService.
     */
    public BusinessObjectService getBusinessObjectService() {
        return businessObjectService;
    }

    /**
     * Sets the businessObjectService attribute value.
     * @param businessObjectService The businessObjectService to set.
     */
    public void setBusinessObjectService(BusinessObjectService businessObjectService) {
        this.businessObjectService = businessObjectService;
    }
}