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.purap.dataaccess.impl;
017    
018    import java.util.HashMap;
019    import java.util.Iterator;
020    import java.util.List;
021    import java.util.Map;
022    
023    import org.apache.ojb.broker.query.Criteria;
024    import org.apache.ojb.broker.query.QueryByCriteria;
025    import org.kuali.kfs.module.purap.PurapConstants;
026    import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceItemMapping;
027    import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceLoadSummary;
028    import org.kuali.kfs.module.purap.dataaccess.ElectronicInvoicingDao;
029    import org.kuali.kfs.module.purap.document.ElectronicInvoiceRejectDocument;
030    import org.kuali.kfs.module.purap.document.PaymentRequestDocument;
031    import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb;
032    
033    public class ElectronicInvoicingDaoOjb extends PlatformAwareDaoBaseOjb implements ElectronicInvoicingDao {
034    
035        private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ElectronicInvoicingDaoOjb.class);
036    
037        public ElectronicInvoicingDaoOjb() {
038            super();
039        }
040    
041        public ElectronicInvoiceLoadSummary getElectronicInvoiceLoadSummary(Integer loadId, String vendorDunsNumber) {
042            LOG.debug("getElectronicInvoiceLoadSummary() started");
043    
044            Criteria criteria = new Criteria();
045            criteria.addEqualTo("id", loadId);
046            criteria.addEqualTo("vendorDunsNumber", vendorDunsNumber);
047    
048            return (ElectronicInvoiceLoadSummary) getPersistenceBrokerTemplate().getObjectByQuery(new QueryByCriteria(ElectronicInvoiceLoadSummary.class, criteria));
049        }
050    
051        public ElectronicInvoiceLoadSummary saveElectronicInvoiceLoadSummary(ElectronicInvoiceLoadSummary loadSummary) {
052            LOG.debug("saveElectronicInvoiceLoadSummary() started");
053            getPersistenceBrokerTemplate().store(loadSummary);
054            getPersistenceBroker(true).retrieveAllReferences(loadSummary);
055            return loadSummary;
056        }
057    
058        public ElectronicInvoiceRejectDocument saveElectronicInvoiceReject(ElectronicInvoiceRejectDocument reject) {
059            LOG.debug("saveElectronicInvoiceReject() started");
060            getPersistenceBrokerTemplate().store(reject);
061            getPersistenceBroker(true).retrieveAllReferences(reject);
062            return reject;
063        }
064    
065        public List getPendingElectronicInvoices() {
066            LOG.debug("getPendingElectronicInvoices() started");
067    
068            Criteria criteria = new Criteria();
069            criteria.addEqualTo("status.code", PurapConstants.PaymentRequestStatuses.PENDING_E_INVOICE);
070            criteria.addEqualTo("isElectronicInvoice", Boolean.TRUE);
071            List invoices = (List) getPersistenceBrokerTemplate().getCollectionByQuery(new QueryByCriteria(PaymentRequestDocument.class, criteria));
072            for (Iterator iter = invoices.iterator(); iter.hasNext();) {
073                PaymentRequestDocument p = (PaymentRequestDocument) iter.next();
074            }
075    
076            return invoices;
077        }
078    
079        public Map getDefaultItemMappingMap() {
080            LOG.debug("getDefaultItemMappingMap() started");
081            Criteria criteria = new Criteria();
082            criteria.addIsNull("vendorHeaderGeneratedIdentifier");
083            criteria.addIsNull("vendorDetailAssignedIdentifier");
084            criteria.addEqualTo("active", true);
085            return this.getItemMappingMap(criteria);
086        }
087    
088        public Map getItemMappingMap(Integer vendorHeaderId, Integer vendorDetailId) {
089            LOG.debug("getItemMappingMap() started for vendor id " + vendorHeaderId + "-" + vendorDetailId);
090            Criteria criteria = new Criteria();
091            criteria.addEqualTo("vendorHeaderGeneratedIdentifier", vendorHeaderId);
092            criteria.addEqualTo("vendorDetailAssignedIdentifier", vendorDetailId);
093            criteria.addEqualTo("active", true);
094            return this.getItemMappingMap(criteria);
095        }
096    
097        protected Map getItemMappingMap(Criteria criteria) {
098            Map hm = new HashMap();
099            List itemMappings = (List) getPersistenceBrokerTemplate().getCollectionByQuery(new QueryByCriteria(ElectronicInvoiceItemMapping.class, criteria));
100    
101            for (Iterator iter = itemMappings.iterator(); iter.hasNext();) {
102                ElectronicInvoiceItemMapping mapping = (ElectronicInvoiceItemMapping) iter.next();
103                hm.put(mapping.getInvoiceItemTypeCode(), mapping);
104            }
105            return hm;
106        }
107    }