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.businessobject;
017    
018    import java.util.ArrayList;
019    import java.util.List;
020    
021    import org.apache.commons.lang.StringUtils;
022    import org.kuali.kfs.module.ec.EffortPropertyConstants;
023    import org.kuali.kfs.module.ec.document.EffortCertificationDocument;
024    import org.kuali.kfs.sys.KFSPropertyConstants;
025    import org.kuali.kfs.sys.ObjectUtil;
026    import org.kuali.kfs.sys.context.SpringContext;
027    import org.kuali.rice.kew.exception.WorkflowException;
028    import org.kuali.rice.kim.bo.Person;
029    import org.kuali.rice.kns.service.ParameterConstants.COMPONENT;
030    import org.kuali.rice.kns.util.ObjectUtils;
031    import org.kuali.rice.kns.workflow.service.KualiWorkflowInfo;
032    
033    /**
034     * Business object for the outstanding documents by organization report
035     */
036    @COMPONENT(component="OutstandingCertificationsByOrganization")
037    public class OutstandingCertificationsByOrganization extends EffortCertificationDocument {
038    
039        protected static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OutstandingCertificationsByOrganization.class);
040    
041        /**
042         * gets a string representation of the document's chart and organization.
043         * 
044         * @return comma separated String
045         */
046        public String getCertificationOrganizations() {
047            String certificationOrganizations = "";
048            List<String> certificationOrganizationList = new ArrayList();
049            List<EffortCertificationDetail> details = getEffortCertificationDetailLines();
050    
051            for (EffortCertificationDetail detailLine : details) {
052                String accountOrg = detailLine.getAccount().getChartOfAccountsCode() + "-" + detailLine.getAccount().getOrganizationCode();
053                if (!certificationOrganizationList.contains(accountOrg)) {
054                    certificationOrganizationList.add(accountOrg);
055                    if (certificationOrganizations.equals(""))
056                        certificationOrganizations = accountOrg;
057                    else
058                        certificationOrganizations = certificationOrganizations + ", " + accountOrg;
059                }
060            }
061    
062            return certificationOrganizations;
063        }
064    
065        /**
066         * Queries workflow to get users who have an approval request for this effort certification.
067         * 
068         * @return String - names of users (seperated by comma) who have an approval request
069         */
070        public String getNextApprovers() {
071            String nextApprovers = "";
072    
073            try {
074                List<String> approverUUIDs = SpringContext.getBean(KualiWorkflowInfo.class).getApprovalRequestedUsers(Long.valueOf(getDocumentHeader().getDocumentNumber()));
075                for (String approverUUID : approverUUIDs) {
076                    Person approveUser = SpringContext.getBean(org.kuali.rice.kim.service.PersonService.class).getPerson(approverUUID);
077                    if (approveUser == null) {
078                        LOG.error("User information not found for UUID: " + approverUUID);
079                    }
080                    if (StringUtils.isBlank(nextApprovers)) {
081                        nextApprovers = approveUser.getName();
082                    }
083                    else {
084                        nextApprovers += "; " + approveUser.getName();
085                    }
086                }
087            }
088            catch (WorkflowException e) {
089                LOG.error("Problem getting next approver", e);
090            }
091    
092            return nextApprovers;
093        }
094    
095        /**
096         * @see java.lang.Object#equals(java.lang.Object)
097         */
098        @Override
099        public boolean equals(Object arg0) {
100            if(arg0 instanceof OutstandingCertificationsByOrganization) {
101                List<String> keyFields = new ArrayList<String>();
102                keyFields.add(KFSPropertyConstants.DOCUMENT_NUMBER);
103    
104                ObjectUtil.equals(this, arg0, keyFields );
105            }
106            
107            return false;
108        }
109    }
110