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.cg.dataaccess.impl;
017    
018    import java.sql.Date;
019    import java.util.ArrayList;
020    import java.util.Iterator;
021    import java.util.List;
022    
023    import org.apache.ojb.broker.query.Criteria;
024    import org.apache.ojb.broker.query.QueryByCriteria;
025    import org.apache.ojb.broker.query.QueryFactory;
026    import org.kuali.kfs.module.cg.dataaccess.CloseDao;
027    import org.kuali.kfs.module.cg.document.ProposalAwardCloseDocument;
028    import org.kuali.kfs.sys.KFSConstants;
029    import org.kuali.kfs.sys.context.SpringContext;
030    import org.kuali.rice.kew.exception.WorkflowException;
031    import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb;
032    import org.kuali.rice.kns.service.DateTimeService;
033    import org.kuali.rice.kns.service.DocumentService;
034    
035    /**
036     * @see CloseDao
037     */
038    public class CloseDaoOjb extends PlatformAwareDaoBaseOjb implements CloseDao {
039    
040        /**
041         * @see org.kuali.kfs.module.cg.dataaccess.CloseDao#getMaxApprovedClose()
042         */
043        public ProposalAwardCloseDocument getMaxApprovedClose() {
044    
045            DateTimeService dateTimeService = SpringContext.getBean(DateTimeService.class);
046            Date today = dateTimeService.getCurrentSqlDateMidnight();
047            
048            Criteria criteria = new Criteria();
049            criteria.addEqualTo("userInitiatedCloseDate", today);
050            criteria.addEqualTo("documentHeader.financialDocumentStatusCode", KFSConstants.DocumentStatusCodes.ENROUTE);
051            QueryByCriteria query = QueryFactory.newQuery(ProposalAwardCloseDocument.class, criteria);
052            query.addOrderByDescending("documentNumber");
053    
054            Iterator<ProposalAwardCloseDocument> documents = (Iterator<ProposalAwardCloseDocument>) getPersistenceBrokerTemplate().getIteratorByQuery(query);
055            ArrayList<String> documentHeaderIds = new ArrayList<String>();
056            while (documents.hasNext()) {
057                ProposalAwardCloseDocument document = (ProposalAwardCloseDocument) documents.next();
058                documentHeaderIds.add(document.getDocumentNumber());
059            }
060    
061            List<ProposalAwardCloseDocument> docs = null;
062            
063            if (documentHeaderIds.size() > 0) { 
064                
065                try {
066                docs = SpringContext.getBean(DocumentService.class).getDocumentsByListOfDocumentHeaderIds(ProposalAwardCloseDocument.class, documentHeaderIds);
067                } catch (WorkflowException we) {
068                    throw new RuntimeException(we);
069                }
070                
071                if (docs.size() > 1) {
072                    ProposalAwardCloseDocument close = docs.remove(0);
073                    Date closeDate = close.getCloseOnOrBeforeDate();
074                    for (ProposalAwardCloseDocument cfdaClose: docs) {
075                        if (cfdaClose.getCloseOnOrBeforeDate().equals(closeDate)) {
076                            //disapprove docs with same close date??
077                        }
078                            
079                    }
080                    return close;
081                    
082                } else if (docs.size() == 1) {
083                    return docs.get(0);
084                } else
085                    return null;
086                
087            } else {
088                return null;
089            }
090            
091          
092        }
093    
094        public ProposalAwardCloseDocument getMostRecentClose() {
095            DateTimeService dateTimeService = SpringContext.getBean(DateTimeService.class);
096            Date today = dateTimeService.getCurrentSqlDateMidnight();
097            
098            Criteria criteria = new Criteria();
099            criteria.addEqualTo("userInitiatedCloseDate", today);
100            criteria.addEqualTo("documentHeader.financialDocumentStatusCode", KFSConstants.DocumentStatusCodes.APPROVED);
101            QueryByCriteria query = QueryFactory.newQuery(ProposalAwardCloseDocument.class, criteria);
102            query.addOrderByDescending("documentNumber");
103    
104            Iterator<ProposalAwardCloseDocument> documents = (Iterator<ProposalAwardCloseDocument>) getPersistenceBrokerTemplate().getIteratorByQuery(query);
105            ArrayList<String> documentHeaderIds = new ArrayList<String>();
106            while (documents.hasNext()) {
107                ProposalAwardCloseDocument document = (ProposalAwardCloseDocument) documents.next();
108                documentHeaderIds.add(document.getDocumentNumber());
109            }
110    
111            List<ProposalAwardCloseDocument> docs = null;
112            
113            if (documentHeaderIds.size() > 0) { 
114                
115                try {
116                docs = SpringContext.getBean(DocumentService.class).getDocumentsByListOfDocumentHeaderIds(ProposalAwardCloseDocument.class, documentHeaderIds);
117                } catch (WorkflowException we) {
118                    throw new RuntimeException(we);
119                }
120                
121                if (docs.size() > 1) {
122                    ProposalAwardCloseDocument close = docs.remove(0);
123                    return close;
124                    
125                } else if (docs.size() == 1) {
126                    return docs.get(0);
127                } else
128                    return null;
129                
130            } else {
131                return null;
132            }
133        }
134        
135        
136        /**
137         * @see org.kuali.kfs.module.cg.dataaccess.CloseDao#save(org.kuali.kfs.module.cg.businessobject.Close)
138         */
139        public void save(ProposalAwardCloseDocument close) {
140            getPersistenceBrokerTemplate().store(close);
141        }
142    
143    }