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.module.ec.service.impl; 017 018 import java.util.ArrayList; 019 import java.util.Arrays; 020 import java.util.Collection; 021 import java.util.HashMap; 022 import java.util.HashSet; 023 import java.util.List; 024 import java.util.Map; 025 import java.util.Set; 026 027 import org.apache.commons.lang.StringUtils; 028 import org.kuali.kfs.integration.ec.EffortCertificationReport; 029 import org.kuali.kfs.module.ec.EffortConstants; 030 import org.kuali.kfs.module.ec.EffortKeyConstants; 031 import org.kuali.kfs.module.ec.EffortPropertyConstants; 032 import org.kuali.kfs.module.ec.businessobject.EffortCertificationDocumentBuild; 033 import org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition; 034 import org.kuali.kfs.module.ec.businessobject.EffortCertificationReportEarnPaygroup; 035 import org.kuali.kfs.module.ec.businessobject.EffortCertificationReportPosition; 036 import org.kuali.kfs.module.ec.document.EffortCertificationDocument; 037 import org.kuali.kfs.module.ec.service.EffortCertificationReportDefinitionService; 038 import org.kuali.kfs.sys.KFSConstants; 039 import org.kuali.kfs.sys.KFSPropertyConstants; 040 import org.kuali.kfs.sys.MessageBuilder; 041 import org.kuali.rice.kns.service.BusinessObjectService; 042 import org.kuali.rice.kns.util.ObjectUtils; 043 044 /** 045 * Provide the implementation of the service methods related to EffortCertificationReportDefinition 046 * 047 * @see org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition 048 */ 049 public class EffortCertificationReportDefinitionServiceImpl implements EffortCertificationReportDefinitionService { 050 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(EffortCertificationReportDefinitionServiceImpl.class); 051 052 private BusinessObjectService businessObjectService; 053 054 /** 055 * @see org.kuali.kfs.module.ec.service.EffortCertificationReportDefinitionService#findReportDefinitionByPrimaryKey(java.util.Map) 056 */ 057 public EffortCertificationReportDefinition findReportDefinitionByPrimaryKey(Map<String, String> fieldValues) { 058 return (EffortCertificationReportDefinition) businessObjectService.findByPrimaryKey(EffortCertificationReportDefinition.class, fieldValues); 059 } 060 061 /** 062 * @see org.kuali.kfs.module.ec.service.EffortCertificationReportDefinitionService#validateEffortCertificationReportDefinition(org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition) 063 */ 064 public String validateEffortCertificationReportDefinition(EffortCertificationReportDefinition effortCertificationReportDefinition) { 065 Integer fiscalYear = effortCertificationReportDefinition.getUniversityFiscalYear(); 066 String reportNumber = effortCertificationReportDefinition.getEffortCertificationReportNumber(); 067 068 // Fiscal Year is required 069 if (ObjectUtils.isNull(fiscalYear)) { 070 return MessageBuilder.buildMessage(EffortKeyConstants.ERROR_FISCAL_YEAR_MISSING, null).getMessage(); 071 } 072 073 // Report Number is required 074 if (StringUtils.isEmpty(reportNumber)) { 075 return MessageBuilder.buildMessage(EffortKeyConstants.ERROR_REPORT_NUMBER_MISSING, null).getMessage(); 076 } 077 078 String combinedFieldValues = new StringBuilder(fiscalYear.toString()).append(EffortConstants.VALUE_SEPARATOR).append(reportNumber).toString(); 079 080 // check if there exists the given report definition 081 effortCertificationReportDefinition = (EffortCertificationReportDefinition)businessObjectService.retrieve(effortCertificationReportDefinition); 082 if (effortCertificationReportDefinition == null) { 083 return MessageBuilder.buildMessage(EffortKeyConstants.ERROR_REPORT_DEFINITION_NOT_EXIST, combinedFieldValues).getMessage(); 084 } 085 086 // check if the given report definition is still active 087 if (!effortCertificationReportDefinition.isActive()) { 088 return MessageBuilder.buildMessage(EffortKeyConstants.ERROR_REPORT_DEFINITION_INACTIVE, combinedFieldValues).getMessage(); 089 } 090 091 return null; 092 } 093 094 /** 095 * @see org.kuali.kfs.module.ec.service.EffortCertificationReportDefinitionService#findPositionObjectGroupCodes(org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition) 096 */ 097 public List<String> findPositionObjectGroupCodes(EffortCertificationReportDefinition reportDefinition) { 098 Map<String, String> fieldValues = reportDefinition.buildKeyMapForCurrentReportDefinition(); 099 fieldValues.put(KFSPropertyConstants.ACTIVE, Boolean.TRUE.toString()); 100 101 Collection<EffortCertificationReportPosition> reportPosition = businessObjectService.findMatching(EffortCertificationReportPosition.class, fieldValues); 102 103 List<String> positionGroupCodes = new ArrayList<String>(); 104 for (EffortCertificationReportPosition position : reportPosition) { 105 positionGroupCodes.add(position.getEffortCertificationReportPositionObjectGroupCode()); 106 } 107 108 return positionGroupCodes; 109 } 110 111 /** 112 * @see org.kuali.kfs.module.ec.service.EffortCertificationReportDefinitionService#findReportEarnCodePayGroups(org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition) 113 */ 114 public Map<String, Set<String>> findReportEarnCodePayGroups(EffortCertificationReportDefinition reportDefinition) { 115 Collection<EffortCertificationReportEarnPaygroup> reportEarnPay = this.findReportEarnPay(reportDefinition); 116 Map<String, Set<String>> earnCodePayGroups = new HashMap<String, Set<String>>(); 117 118 for (EffortCertificationReportEarnPaygroup earnPay : reportEarnPay) { 119 String payGroup = earnPay.getPayGroup(); 120 String earnCode = earnPay.getEarnCode(); 121 122 if (earnCodePayGroups.containsKey(payGroup)) { 123 Set<String> earnCodeSet = earnCodePayGroups.get(payGroup); 124 earnCodeSet.add(earnCode); 125 } 126 else { 127 Set<String> earnCodeSet = new HashSet<String>(); 128 earnCodeSet.add(earnCode); 129 earnCodePayGroups.put(payGroup, earnCodeSet); 130 } 131 } 132 133 return earnCodePayGroups; 134 } 135 136 /** 137 * @see org.kuali.kfs.module.ec.service.EffortCertificationReportDefinitionService#findReportEarnPay(org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition) 138 */ 139 public Collection<EffortCertificationReportEarnPaygroup> findReportEarnPay(EffortCertificationReportDefinition reportDefinition) { 140 Map<String, Object> fieldValues = new HashMap<String, Object>(); 141 fieldValues.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, reportDefinition.getUniversityFiscalYear()); 142 fieldValues.put(EffortPropertyConstants.EFFORT_CERTIFICATION_REPORT_TYPE_CODE, reportDefinition.getEffortCertificationReportTypeCode()); 143 fieldValues.put(KFSPropertyConstants.ACTIVE, Boolean.TRUE.toString()); 144 145 return businessObjectService.findMatching(EffortCertificationReportEarnPaygroup.class, fieldValues); 146 } 147 148 /** 149 * @see org.kuali.kfs.module.ec.service.EffortCertificationReportDefinitionService#existsPendingEffortCertification(org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition) 150 */ 151 public boolean hasPendingEffortCertification(String emplid, EffortCertificationReportDefinition reportDefinition) { 152 Map<String, Object> fieldValues = new HashMap<String, Object>(); 153 fieldValues.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, reportDefinition.getUniversityFiscalYear()); 154 fieldValues.put(EffortPropertyConstants.EFFORT_CERTIFICATION_REPORT_NUMBER, reportDefinition.getEffortCertificationReportNumber()); 155 156 int numOfPendingDocuments = businessObjectService.countMatching(EffortCertificationDocumentBuild.class, fieldValues); 157 if(numOfPendingDocuments > 0) { 158 return true; 159 } 160 161 List<String> pendingStatusCodes = Arrays.asList(KFSConstants.DocumentStatusCodes.ENROUTE); 162 fieldValues.put(KFSPropertyConstants.EMPLID, emplid); 163 fieldValues.put(KFSPropertyConstants.DOCUMENT_HEADER + "." + KFSPropertyConstants.FINANCIAL_DOCUMENT_STATUS_CODE, pendingStatusCodes); 164 165 return businessObjectService.countMatching(EffortCertificationDocument.class, fieldValues) > 0; 166 } 167 168 /** 169 * @see org.kuali.kfs.module.ec.service.EffortCertificationReportDefinitionService#hasApprovedEffortCertification(java.lang.String, org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition) 170 */ 171 public boolean hasApprovedEffortCertification(String emplid, EffortCertificationReportDefinition reportDefinition) { 172 Map<String, Object> fieldValues = new HashMap<String, Object>(); 173 fieldValues.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, reportDefinition.getUniversityFiscalYear()); 174 fieldValues.put(EffortPropertyConstants.EFFORT_CERTIFICATION_REPORT_NUMBER, reportDefinition.getEffortCertificationReportNumber()); 175 fieldValues.put(KFSPropertyConstants.EMPLID, emplid); 176 fieldValues.put(KFSPropertyConstants.DOCUMENT_HEADER + "." + KFSPropertyConstants.FINANCIAL_DOCUMENT_STATUS_CODE, KFSConstants.DocumentStatusCodes.APPROVED); 177 178 return businessObjectService.countMatching(EffortCertificationDocument.class, fieldValues) > 0; 179 } 180 181 /** 182 * @see org.kuali.kfs.module.ec.service.EffortCertificationReportDefinitionService#hasBeenUsedForEffortCertificationGeneration(org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition) 183 */ 184 public boolean hasBeenUsedForEffortCertificationGeneration(EffortCertificationReportDefinition reportDefinition) { 185 Map<String, Object> fieldValues = new HashMap<String, Object>(); 186 fieldValues.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, reportDefinition.getUniversityFiscalYear()); 187 fieldValues.put(EffortPropertyConstants.EFFORT_CERTIFICATION_REPORT_NUMBER, reportDefinition.getEffortCertificationReportNumber()); 188 189 return businessObjectService.countMatching(EffortCertificationDocument.class, fieldValues) > 0; 190 } 191 192 /** 193 * @see org.kuali.kfs.module.ec.service.EffortCertificationReportDefinitionService#hasBeenUsedForEffortCertificationGeneration(java.lang.String, org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition) 194 */ 195 public boolean hasBeenUsedForEffortCertificationGeneration(String emplid, EffortCertificationReport reportDefinition) { 196 Map<String, Object> fieldValues = new HashMap<String, Object>(); 197 fieldValues.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, reportDefinition.getUniversityFiscalYear()); 198 fieldValues.put(EffortPropertyConstants.EFFORT_CERTIFICATION_REPORT_NUMBER, reportDefinition.getEffortCertificationReportNumber()); 199 fieldValues.put(KFSPropertyConstants.EMPLID, emplid); 200 201 return businessObjectService.countMatching(EffortCertificationDocument.class, fieldValues) > 0; 202 } 203 204 /** 205 * Sets the businessObjectService attribute value. 206 * 207 * @param businessObjectService The businessObjectService to set. 208 */ 209 public void setBusinessObjectService(BusinessObjectService businessObjectService) { 210 this.businessObjectService = businessObjectService; 211 } 212 }