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.businessobject.lookup;
017
018 import java.util.Collection;
019 import java.util.HashMap;
020 import java.util.Iterator;
021 import java.util.List;
022 import java.util.Map;
023
024 import org.kuali.kfs.module.ar.ArConstants;
025 import org.kuali.kfs.module.ar.businessobject.Customer;
026 import org.kuali.kfs.module.ar.businessobject.CustomerInvoiceWriteoffLookupResult;
027 import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument;
028 import org.kuali.kfs.sys.context.SpringContext;
029 import org.kuali.rice.kns.bo.PersistableBusinessObject;
030 import org.kuali.rice.kns.lookup.LookupResultsService;
031 import org.kuali.rice.kns.util.KualiDecimal;
032 import org.kuali.rice.kns.util.TypedArrayList;
033
034 public class CustomerInvoiceWriteoffLookupUtil {
035
036 /**
037 * This helper method returns a list of customer invoice writeoff lookup result BO's based off a collection of customer invoice documents
038 * @param customerInvoiceDocuments
039 * @return
040 */
041 public static Collection<CustomerInvoiceWriteoffLookupResult> getPopulatedCustomerInvoiceWriteoffLookupResults(Collection<CustomerInvoiceDocument> customerInvoiceDocuments){
042 Collection<CustomerInvoiceWriteoffLookupResult> populatedCustomerInvoiceWriteoffLookupResults = new TypedArrayList(CustomerInvoiceWriteoffLookupResult.class);
043
044 if (customerInvoiceDocuments.size() == 0)
045 return populatedCustomerInvoiceWriteoffLookupResults;
046
047 Iterator iter = getCustomerInvoiceDocumentsByCustomerNumberMap(customerInvoiceDocuments).entrySet().iterator();
048 CustomerInvoiceWriteoffLookupResult customerInvoiceWriteoffLookupResult = null;
049 while(iter.hasNext()) {
050
051 Map.Entry entry = (Map.Entry)iter.next();
052 String customerNumber = (String)entry.getKey();
053 List<CustomerInvoiceDocument> list = (List<CustomerInvoiceDocument>)entry.getValue();
054
055 //just get data from first invoice for customer data
056 Customer customer = ((CustomerInvoiceDocument)list.get(0)).getCustomer();
057 customerInvoiceWriteoffLookupResult = new CustomerInvoiceWriteoffLookupResult();
058 customerInvoiceWriteoffLookupResult.setCustomerName(customer.getCustomerName());
059 customerInvoiceWriteoffLookupResult.setCustomerNumber(customer.getCustomerNumber());
060 customerInvoiceWriteoffLookupResult.setCollectionStatus(ArConstants.NO_COLLECTION_STATUS_STRING);
061 customerInvoiceWriteoffLookupResult.setCustomerTotal(getCustomerTotal(list));
062 customerInvoiceWriteoffLookupResult.setCustomerInvoiceDocuments(list);
063
064 populatedCustomerInvoiceWriteoffLookupResults.add(customerInvoiceWriteoffLookupResult);
065 }
066
067 return populatedCustomerInvoiceWriteoffLookupResults;
068 }
069
070 public static KualiDecimal getCustomerTotal(List<CustomerInvoiceDocument> customerInvoiceDocuments){
071 KualiDecimal customerTotal = KualiDecimal.ZERO;
072 for( CustomerInvoiceDocument customerInvoiceDocument : customerInvoiceDocuments ){
073 customerTotal = customerTotal.add(customerInvoiceDocument.getOpenAmount());
074 }
075 return customerTotal;
076 }
077
078 /**
079 * This helper method returns a map of a list of invoices by customer number
080 * @param customerInvoiceDocuments
081 * @return
082 */
083 public static Map<String, List<CustomerInvoiceDocument>> getCustomerInvoiceDocumentsByCustomerNumberMap(Collection<CustomerInvoiceDocument> customerInvoiceDocuments){
084 //use a map to sort invoices by customer number
085 Map<String, List<CustomerInvoiceDocument>> customerInvoiceDocumentsByCustomerNumberMap = new HashMap<String, List<CustomerInvoiceDocument>>();
086 for( CustomerInvoiceDocument customerInvoiceDocument : customerInvoiceDocuments){
087 String customerNumber = customerInvoiceDocument.getAccountsReceivableDocumentHeader().getCustomerNumber();
088 if( customerInvoiceDocumentsByCustomerNumberMap.containsKey(customerNumber) ){
089 ((List<CustomerInvoiceDocument>)customerInvoiceDocumentsByCustomerNumberMap.get(customerNumber)).add(customerInvoiceDocument);
090 } else {
091 List<CustomerInvoiceDocument> customerInvoiceDocumentsForCustomerNumber = new TypedArrayList(CustomerInvoiceDocument.class);
092 customerInvoiceDocumentsForCustomerNumber.add(customerInvoiceDocument);
093 customerInvoiceDocumentsByCustomerNumberMap.put(customerNumber, customerInvoiceDocumentsForCustomerNumber);
094 }
095 }
096
097 return customerInvoiceDocumentsByCustomerNumberMap;
098 }
099
100 public static Collection<CustomerInvoiceDocument> getCustomerInvoiceDocumentsFromLookupResultsSequenceNumber(String lookupResultsSequenceNumber, String personId) {
101 Collection<CustomerInvoiceDocument> customerInvoiceDocuments = new TypedArrayList(CustomerInvoiceDocument.class);
102 try {
103 for (PersistableBusinessObject obj : SpringContext.getBean(LookupResultsService.class).retrieveSelectedResultBOs(lookupResultsSequenceNumber, CustomerInvoiceDocument.class, personId)) {
104 customerInvoiceDocuments.add((CustomerInvoiceDocument) obj);
105 }
106 }
107 catch (Exception e) {
108 throw new RuntimeException(e);
109 }
110
111 return customerInvoiceDocuments;
112 }
113
114 public static Collection<CustomerInvoiceWriteoffLookupResult> getCustomerInvoiceWriteoffResutlsFromLookupResultsSequenceNumber(String lookupResultsSequenceNumber, String personId){
115 return CustomerInvoiceWriteoffLookupUtil.getPopulatedCustomerInvoiceWriteoffLookupResults(getCustomerInvoiceDocumentsFromLookupResultsSequenceNumber(lookupResultsSequenceNumber, personId));
116 }
117
118 }
119