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;
017    
018    import org.kuali.kfs.coa.businessobject.Account;
019    import org.kuali.kfs.coa.businessobject.ObjectCode;
020    import org.kuali.kfs.module.ar.ArConstants;
021    import org.kuali.kfs.module.ar.document.CustomerCreditMemoDocument;
022    import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument;
023    import org.kuali.kfs.sys.context.SpringContext;
024    import org.kuali.kfs.sys.document.validation.impl.AccountingDocumentRuleBaseConstants.GENERAL_LEDGER_PENDING_ENTRY_CODE;
025    import org.kuali.rice.kns.service.ParameterService;
026    import org.kuali.rice.kns.util.KualiDecimal;
027    
028    public class ReceivableCustomerCreditMemoDetail extends CustomerCreditMemoDetail {
029        private CustomerCreditMemoDetail postable;
030        private CustomerCreditMemoDocument poster;
031        private boolean isUsingReceivableFAU;
032        
033        public ReceivableCustomerCreditMemoDetail(CustomerCreditMemoDetail postable, CustomerCreditMemoDocument poster){
034            
035            this.poster = poster;
036            this.postable = postable;
037            
038            String receivableOffsetOption = SpringContext.getBean(ParameterService.class).getParameterValue(CustomerInvoiceDocument.class, ArConstants.GLPE_RECEIVABLE_OFFSET_GENERATION_METHOD);
039            isUsingReceivableFAU = ArConstants.GLPE_RECEIVABLE_OFFSET_GENERATION_METHOD_FAU.equals( receivableOffsetOption ); 
040            if( isUsingReceivableFAU ){
041                this.poster.getInvoice().refreshReferenceObject("paymentAccount");
042                this.poster.getInvoice().refreshReferenceObject("paymentChartOfAccounts");
043                this.poster.getInvoice().refreshReferenceObject("paymentSubAccount");
044                this.poster.getInvoice().refreshReferenceObject("paymentFinancialObject");
045                this.poster.getInvoice().refreshReferenceObject("paymentFinancialSubObject");
046                this.poster.getInvoice().refreshReferenceObject("paymentProject");           
047            } else {
048                this.postable.refreshNonUpdateableReferences();
049            }
050            
051        }
052    
053        @Override
054         public Account getAccount() {
055             if ( isUsingReceivableFAU ){
056                 return poster.getInvoice().getPaymentAccount();
057             } else {
058                 return postable.getAccount();
059             }
060         }
061        
062        @Override
063         public String getAccountNumber() {
064             if ( isUsingReceivableFAU ){
065                 return poster.getInvoice().getPaymentAccountNumber();
066             } else {
067                 return postable.getAccountNumber();
068             }
069         }
070    
071        @Override
072         public KualiDecimal getAmount() {
073             return postable.getCreditMemoItemTotalAmount();
074         }
075    
076        @Override
077         public String getChartOfAccountsCode() {
078             if ( isUsingReceivableFAU ){
079                 return poster.getInvoice().getPaymentChartOfAccountsCode();
080             } else {
081                 return postable.getChartOfAccountsCode();
082             }        
083         }
084    
085        @Override
086         public String getDocumentNumber() {
087             return postable.getDocumentNumber();
088         }
089    
090        @Override
091         public String getFinancialDocumentLineDescription() {
092             return postable.getFinancialDocumentLineDescription();
093         }
094    
095        @Override
096         public String getFinancialObjectCode() {
097             if ( isUsingReceivableFAU ){
098                 return poster.getInvoice().getPaymentFinancialObjectCode();
099             } else {
100                 return postable.getAccountsReceivableObjectCode();
101             }   
102         }
103    
104        @Override
105         public ObjectCode getObjectCode() {
106            if ( isUsingReceivableFAU ){
107                return poster.getInvoice().getPaymentFinancialObject();
108            } else {
109                return postable.getAccountsReceivableObject();
110            }
111         }
112        
113        @Override
114        public String getFinancialSubObjectCode() {
115            return GENERAL_LEDGER_PENDING_ENTRY_CODE.getBlankFinancialSubObjectCode(); 
116        }
117    
118        @Override
119         public String getOrganizationReferenceId() {
120             if ( isUsingReceivableFAU ){
121                 return poster.getInvoice().getPaymentOrganizationReferenceIdentifier();
122             } else {
123                 return postable.getOrganizationReferenceId();
124             }
125         }
126    
127        @Override
128         public String getProjectCode() {
129             if ( isUsingReceivableFAU ){
130                 return poster.getInvoice().getPaymentProjectCode();
131             } else {
132                 return postable.getProjectCode();
133             }
134         }
135    
136        @Override
137         public String getSubAccountNumber() {
138             if ( isUsingReceivableFAU ){
139                 return poster.getInvoice().getPaymentSubAccountNumber();
140             } else {
141                 return postable.getSubAccountNumber();
142             }
143         }
144    
145    }