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.ar.document.service.impl;
017    
018    import java.util.Collection;
019    import java.util.HashMap;
020    import java.util.Map;
021    
022    import org.kuali.kfs.module.ar.businessobject.AppliedPayment;
023    import org.kuali.kfs.module.ar.businessobject.InvoicePaidApplied;
024    import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument;
025    import org.kuali.kfs.module.ar.document.service.InvoicePaidAppliedService;
026    import org.kuali.kfs.sys.service.UniversityDateService;
027    import org.kuali.rice.kns.service.BusinessObjectService;
028    import org.springframework.transaction.annotation.Transactional;
029    
030    @Transactional
031    public class InvoicePaidAppliedServiceImpl implements InvoicePaidAppliedService<AppliedPayment> {
032    
033        private BusinessObjectService businessObjectService;
034        private UniversityDateService universityDateService;
035    
036        /**
037         * @see org.kuali.kfs.module.ar.document.service.InvoicePaidAppliedService#clearDocumentPaidAppliedsFromDatabase(java.lang.String)
038         */
039        public void clearDocumentPaidAppliedsFromDatabase(String documentNumber) {
040            Map<String,String> fields = new HashMap<String,String>();
041            fields.put("documentNumber", documentNumber);
042            businessObjectService.deleteMatching(InvoicePaidApplied.class, fields);
043        }
044    
045    //    /**
046    //     * @see org.kuali.kfs.module.ar.document.service.InvoicePaidAppliedService#getInvoicePaidAppliedsForCustomerInvoiceDetail(org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail, org.kuali.kfs.module.ar.document.PaymentApplicationDocument)
047    //     */
048    //    public Collection<InvoicePaidApplied> getInvoicePaidAppliedsForCustomerInvoiceDetail(CustomerInvoiceDetail customerInvoiceDetail, PaymentApplicationDocument paymentApplicationDocument) {
049    //        List<InvoicePaidApplied> invoicePaidApplieds = paymentApplicationDocument.getInvoicePaidApplieds();
050    //        List<InvoicePaidApplied> relatedInvoicePaidApplieds = new ArrayList<InvoicePaidApplied>();
051    //        
052    //        for(InvoicePaidApplied invoicePaidApplied : invoicePaidApplieds) {
053    //            boolean matches = true;
054    //            matches &= invoicePaidApplied.getInvoiceItemNumber().equals(customerInvoiceDetail.getSequenceNumber());
055    //            matches &= invoicePaidApplied.getFinancialDocumentReferenceInvoiceNumber().equals(customerInvoiceDetail.getDocumentNumber());
056    //            if(matches) {
057    //                relatedInvoicePaidApplieds.add(invoicePaidApplied);
058    //            }
059    //        }
060    //        return relatedInvoicePaidApplieds;
061    //    }
062        
063    //    /**
064    //     * @see org.kuali.kfs.module.ar.document.service.InvoicePaidAppliedService#getInvoicePaidAppliedsForCustomerInvoiceDetail(org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail)
065    //     */
066    //    @SuppressWarnings("unchecked")
067    //    public Collection<InvoicePaidApplied> getInvoicePaidAppliedsForCustomerInvoiceDetail(CustomerInvoiceDetail customerInvoiceDetail) {
068    //        Map criteria = new HashMap();
069    //        criteria.put("invoiceItemNumber", customerInvoiceDetail.getSequenceNumber());
070    //        criteria.put("financialDocumentReferenceInvoiceNumber", customerInvoiceDetail.getDocumentNumber());
071    //        return businessObjectService.findMatching(InvoicePaidApplied.class, criteria);
072    //    }
073    //    
074    //    public Collection<InvoicePaidApplied> getInvoicePaidAppliedsForCustomerInvoiceDetail(CustomerInvoiceDetail customerInvoiceDetail, String applicationDocNumber) {
075    //        Map criteria = new HashMap();
076    //        criteria.put("documentNumber", customerInvoiceDetail.getDocumentNumber());
077    //        criteria.put("invoiceItemNumber", customerInvoiceDetail.getSequenceNumber());
078    //        criteria.put("financialDocumentReferenceInvoiceNumber", customerInvoiceDetail.getDocumentNumber());
079    //        return businessObjectService.findMatching(InvoicePaidApplied.class, criteria);
080    //    }
081        
082    //    public Collection<InvoicePaidApplied> getApprovedInvoicePaidAppliedsForCustomerInvoiceDetail(CustomerInvoiceDetail customerInvoiceDetail) {
083    //        Map criteria = new HashMap();
084    //        criteria.put("invoiceItemNumber", customerInvoiceDetail.getSequenceNumber());
085    //        criteria.put("financialDocumentReferenceInvoiceNumber", customerInvoiceDetail.getDocumentNumber());
086    //        criteria.put("documentHeader.financialDocumentStatusCode", KFSConstants.DocumentStatusCodes.APPROVED);
087    //        return businessObjectService.findMatching(InvoicePaidApplied.class, criteria);
088    //    }
089    
090        public Integer getNumberOfInvoicePaidAppliedsForInvoiceDetail(String financialDocumentReferenceInvoiceNumber, Integer invoiceItemNumber){
091            Map<String, Object> criteria = new HashMap<String, Object>();
092            criteria.put("financialDocumentReferenceInvoiceNumber", financialDocumentReferenceInvoiceNumber);
093            criteria.put("invoiceItemNumber", invoiceItemNumber);
094            
095            return businessObjectService.countMatching(InvoicePaidApplied.class, criteria);
096        }
097        
098        public Collection<InvoicePaidApplied> getInvoicePaidAppliedsFromSpecificDocument(String documentNumber, String referenceCustomerInvoiceDocumentNumber) {
099            Map criteria = new HashMap();
100            criteria.put("financialDocumentReferenceInvoiceNumber", referenceCustomerInvoiceDocumentNumber);
101            criteria.put("documentNumber", documentNumber);
102            return businessObjectService.findMatching(InvoicePaidApplied.class, criteria);
103        }    
104                
105            
106    
107        /**
108         * @see org.kuali.kfs.module.ar.document.service.InvoicePaidAppliedService#doesInvoiceHaveAppliedAmounts(org.kuali.kfs.module.ar.document.CustomerInvoiceDocument)
109         */
110        public boolean doesInvoiceHaveAppliedAmounts(CustomerInvoiceDocument document) {
111    
112            HashMap<String, String> criteria = new HashMap<String, String>();
113            criteria.put("financialDocumentReferenceInvoiceNumber", document.getDocumentNumber());
114            
115            Collection<InvoicePaidApplied> results = businessObjectService.findMatching(InvoicePaidApplied.class, criteria);
116            for( InvoicePaidApplied invoicePaidApplied : results ){
117                //don't include discount (the doc num and the ref num are the same document number)
118                if( !invoicePaidApplied.getDocumentNumber().equals(document.getDocumentNumber())){
119                    return true;
120                }
121            }
122            return false;
123        }    
124    
125        /**
126         * @see org.kuali.kfs.module.ar.document.service.InvoicePaidAppliedService#getInvoicePaidAppliedsForInvoice(java.lang.String)
127         */
128        public Collection<InvoicePaidApplied> getInvoicePaidAppliedsForInvoice(String documentNumber) {
129            Map<String, String> criteria = new HashMap<String, String>();
130            criteria.put("financialDocumentReferenceInvoiceNumber", documentNumber);
131            return businessObjectService.findMatching(InvoicePaidApplied.class, criteria);
132        }
133    
134        /**
135         * @see org.kuali.kfs.module.ar.document.service.InvoicePaidAppliedService#getInvoicePaidAppliedsForInvoice(org.kuali.kfs.module.ar.document.CustomerInvoiceDocument)
136         */
137        public Collection<InvoicePaidApplied> getInvoicePaidAppliedsForInvoice(CustomerInvoiceDocument invoice) {
138            return getInvoicePaidAppliedsForInvoice(invoice.getDocumentNumber());
139        }
140    
141        public BusinessObjectService getBusinessObjectService() {
142            return businessObjectService;
143        }
144    
145        public void setBusinessObjectService(BusinessObjectService businessObjectService) {
146            this.businessObjectService = businessObjectService;
147        }
148    
149        public UniversityDateService getUniversityDateService() {
150            return universityDateService;
151        }
152    
153        public void setUniversityDateService(UniversityDateService universityDateService) {
154            this.universityDateService = universityDateService;
155        }
156    }