001 /* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.kfs.coa.service.impl; 017 018 import java.util.HashMap; 019 import java.util.List; 020 import java.util.Map; 021 022 import org.apache.commons.lang.StringUtils; 023 import org.kuali.kfs.coa.businessobject.Organization; 024 import org.kuali.kfs.coa.dataaccess.OrganizationDao; 025 import org.kuali.kfs.coa.service.ChartService; 026 import org.kuali.kfs.coa.service.OrganizationService; 027 import org.kuali.kfs.sys.KFSConstants.ChartApcParms; 028 import org.kuali.kfs.sys.context.SpringContext; 029 import org.kuali.kfs.sys.service.NonTransactional; 030 import org.kuali.rice.kns.service.BusinessObjectService; 031 import org.kuali.rice.kns.service.ParameterService; 032 import org.kuali.rice.kns.util.spring.Cached; 033 034 /** 035 * This class is the service implementation for the Org structure. This is the default implementation, that is delivered with Kuali. 036 */ 037 038 @NonTransactional 039 public class OrganizationServiceImpl implements OrganizationService { 040 private OrganizationDao organizationDao; 041 private ParameterService parameterService; 042 private ChartService chartService; 043 private BusinessObjectService boService; 044 045 /** 046 * 047 * @see org.kuali.kfs.coa.service.OrganizationService#getByPrimaryId(java.lang.String, java.lang.String) 048 */ 049 public Organization getByPrimaryId(String chartOfAccountsCode, String organizationCode) { 050 return organizationDao.getByPrimaryId(chartOfAccountsCode, organizationCode); 051 } 052 053 /** 054 * Implements the getByPrimaryId method defined by OrganizationService. Method is used by KualiOrgReviewAttribute to enable 055 * caching of orgs for routing. 056 * 057 * @see org.kuali.kfs.coa.service.impl.OrganizationServiceImpl#getByPrimaryId(java.lang.String, java.lang.String) 058 */ 059 @Cached 060 public Organization getByPrimaryIdWithCaching(String chartOfAccountsCode, String organizationCode) { 061 return organizationDao.getByPrimaryId(chartOfAccountsCode, organizationCode); 062 } 063 064 /** 065 * @see org.kuali.kfs.coa.service.OrganizationService#getActiveAccountsByOrg(java.lang.String, java.lang.String) 066 */ 067 public List getActiveAccountsByOrg(String chartOfAccountsCode, String organizationCode) { 068 069 if (StringUtils.isBlank(chartOfAccountsCode)) { 070 throw new IllegalArgumentException("String parameter chartOfAccountsCode was null or blank."); 071 } 072 if (StringUtils.isBlank(organizationCode)) { 073 throw new IllegalArgumentException("String parameter organizationCode was null or blank."); 074 } 075 076 return organizationDao.getActiveAccountsByOrg(chartOfAccountsCode, organizationCode); 077 } 078 079 /** 080 * @see org.kuali.kfs.coa.service.OrganizationService#getActiveChildOrgs(java.lang.String, java.lang.String) 081 */ 082 public List getActiveChildOrgs(String chartOfAccountsCode, String organizationCode) { 083 if (StringUtils.isBlank(chartOfAccountsCode)) { 084 throw new IllegalArgumentException("String parameter chartOfAccountsCode was null or blank."); 085 } 086 if (StringUtils.isBlank(organizationCode)) { 087 throw new IllegalArgumentException("String parameter organizationCode was null or blank."); 088 } 089 090 return organizationDao.getActiveChildOrgs(chartOfAccountsCode, organizationCode); 091 } 092 093 @Cached 094 public boolean isParentOrganization( String childChartOfAccountsCode, String childOrganizationCode, String parentChartOfAccountsCode, String parentOrganizationCode ) { 095 if (StringUtils.isBlank(childChartOfAccountsCode)) { 096 throw new IllegalArgumentException("String parameter chartOfAccountsCode was null or blank."); 097 } 098 if (StringUtils.isBlank(childOrganizationCode)) { 099 throw new IllegalArgumentException("String parameter organizationCode was null or blank."); 100 } 101 if (StringUtils.isBlank(parentChartOfAccountsCode)) { 102 throw new IllegalArgumentException("String parameter parentChartOfAccountsCode was null or blank."); 103 } 104 if (StringUtils.isBlank(parentOrganizationCode)) { 105 throw new IllegalArgumentException("String parameter parentOrganizationCode was null or blank."); 106 } 107 108 Organization currOrg = organizationDao.getByPrimaryId(childChartOfAccountsCode, childOrganizationCode); 109 while ( currOrg != null ) { 110 if ( currOrg.getReportsToChartOfAccountsCode().equals(parentChartOfAccountsCode) 111 && currOrg.getReportsToOrganizationCode().equals(parentOrganizationCode) ) { 112 return true; 113 } 114 // if no parent, we've reached the top - stop and return false 115 if ( StringUtils.isBlank(currOrg.getReportsToChartOfAccountsCode()) 116 || StringUtils.isBlank(currOrg.getReportsToOrganizationCode()) 117 || (currOrg.getReportsToChartOfAccountsCode().equals(currOrg.getChartOfAccountsCode()) 118 && currOrg.getReportsToOrganizationCode().equals(currOrg.getOrganizationCode())) 119 ) { 120 return false; 121 } 122 currOrg = organizationDao.getByPrimaryId(currOrg.getReportsToChartOfAccountsCode(), currOrg.getReportsToOrganizationCode()); 123 } 124 125 126 return false; 127 } 128 129 /** 130 * 131 * @see org.kuali.kfs.coa.service.OrganizationService#getActiveOrgsByType(java.lang.String) 132 */ 133 public List<Organization> getActiveOrgsByType(String organizationTypeCode) { 134 if (StringUtils.isBlank(organizationTypeCode)) { 135 throw new IllegalArgumentException("String parameter organizationTypeCode was null or blank."); 136 } 137 138 return organizationDao.getActiveOrgsByType(organizationTypeCode); 139 } 140 141 /** 142 * 143 * @see org.kuali.kfs.coa.service.OrganizationService#getActiveFinancialOrgs() 144 */ 145 public List<Organization> getActiveFinancialOrgs() { 146 Map<String, Object> criteriaMap = new HashMap<String, Object>(); 147 criteriaMap.put("organizationInFinancialProcessingIndicator", Boolean.TRUE); 148 criteriaMap.put("active", Boolean.TRUE); 149 return (List<Organization>)boService.findMatching(Organization.class, criteriaMap); 150 } 151 152 /** 153 * 154 * @see org.kuali.kfs.coa.service.OrganizationService#getRootOrganizationCode() 155 */ 156 public String[] getRootOrganizationCode() { 157 String rootChart = getChartService().getUniversityChart().getChartOfAccountsCode(); 158 String selfReportsOrgType = SpringContext.getBean(ParameterService.class).getParameterValue(Organization.class, ChartApcParms.ORG_MUST_REPORT_TO_SELF_ORG_TYPES); 159 return (organizationDao.getRootOrganizationCode(rootChart, selfReportsOrgType)); 160 } 161 162 public void setParameterService(ParameterService parameterService) { 163 this.parameterService = parameterService; 164 } 165 166 public ChartService getChartService() { 167 return chartService; 168 } 169 170 public void setChartService(ChartService chartService) { 171 this.chartService = chartService; 172 } 173 174 /** 175 * @return Returns the organizationDao. 176 */ 177 public OrganizationDao getOrganizationDao() { 178 return organizationDao; 179 } 180 181 /** 182 * @param organizationDao The organizationDao to set. 183 */ 184 public void setOrganizationDao(OrganizationDao organizationDao) { 185 this.organizationDao = organizationDao; 186 } 187 188 /** 189 * Sets the boService attribute value. 190 * @param boService The boService to set. 191 */ 192 public void setBusinessObjectService(BusinessObjectService boService) { 193 this.boService = boService; 194 } 195 196 }