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.coa.service.ObjectCodeService;
021    import org.kuali.kfs.module.ar.ArConstants;
022    import org.kuali.kfs.module.ar.document.CustomerInvoiceWriteoffDocument;
023    import org.kuali.kfs.module.ar.document.service.CustomerInvoiceWriteoffDocumentService;
024    import org.kuali.kfs.sys.context.SpringContext;
025    import org.kuali.kfs.sys.document.validation.impl.AccountingDocumentRuleBaseConstants.GENERAL_LEDGER_PENDING_ENTRY_CODE;
026    import org.kuali.rice.kns.service.ParameterService;
027    import org.kuali.rice.kns.util.KualiDecimal;
028    
029    
030    public class WriteoffCustomerInvoiceDetail extends CustomerInvoiceDetail {
031        
032        private CustomerInvoiceDetail postable;
033        private CustomerInvoiceWriteoffDocument poster;
034        private boolean isUsingOrgAcctDefaultWriteoffFAU;
035        private boolean isUsingChartForWriteoff;
036        
037        public WriteoffCustomerInvoiceDetail(CustomerInvoiceDetail postable, CustomerInvoiceWriteoffDocument poster){
038            this.postable = postable;
039            this.poster = poster;
040            
041            String writeoffGenerationOption = SpringContext.getBean(ParameterService.class).getParameterValue(CustomerInvoiceWriteoffDocument.class, ArConstants.GLPE_WRITEOFF_GENERATION_METHOD);
042            isUsingOrgAcctDefaultWriteoffFAU = ArConstants.GLPE_WRITEOFF_GENERATION_METHOD_ORG_ACCT_DEFAULT.equals( writeoffGenerationOption );
043            isUsingChartForWriteoff = ArConstants.GLPE_WRITEOFF_GENERATION_METHOD_CHART.equals( writeoffGenerationOption );
044            
045            
046            if( isUsingOrgAcctDefaultWriteoffFAU ){
047                //if is using org account default, I already set the writeoff FAU on
048                //the document, so that is needed to do is refresh the FAU objects
049                this.poster.refreshReferenceObject("account");
050                this.poster.refreshReferenceObject("chartOfAccounts");
051                this.poster.refreshReferenceObject("subAccount");
052                this.poster.refreshReferenceObject("financialObject");
053                this.poster.refreshReferenceObject("financialSubObject");
054                this.poster.refreshReferenceObject("project");                      
055            } else {
056                this.postable.refreshNonUpdateableReferences();
057            }        
058        }
059        
060        @Override
061        public Account getAccount() {
062            if ( isUsingOrgAcctDefaultWriteoffFAU ){
063                return poster.getAccount();
064            } else {
065                return postable.getAccount();
066            }
067        }
068       
069       @Override
070        public String getAccountNumber() {
071            if ( isUsingOrgAcctDefaultWriteoffFAU ){
072                return poster.getAccountNumber();
073            } else {
074                return postable.getAccountNumber();
075            }
076        }
077    
078        @Override
079        public KualiDecimal getAmount() {
080            return postable.getAmountOpen();
081        }
082    
083       @Override
084        public String getChartOfAccountsCode() {
085            if ( isUsingOrgAcctDefaultWriteoffFAU ){
086                return poster.getChartOfAccountsCode();
087            } else {
088                return postable.getChartOfAccountsCode();
089            }        
090        }
091    
092       @Override
093        public String getDocumentNumber() {
094            return postable.getDocumentNumber();
095        }
096    
097       @Override
098        public String getFinancialDocumentLineDescription() {
099            return postable.getFinancialDocumentLineDescription();
100        }
101    
102       @Override
103       public String getFinancialObjectCode() {
104           CustomerInvoiceWriteoffDocumentService customerInvoiceWriteoffDocumentService = SpringContext.getBean(CustomerInvoiceWriteoffDocumentService.class);       
105           return customerInvoiceWriteoffDocumentService.getFinancialObjectCode(postable, poster, isUsingOrgAcctDefaultWriteoffFAU, isUsingChartForWriteoff, this.getChartOfAccountsCode());
106       }
107    
108      @Override
109       public ObjectCode getObjectCode() {
110          CustomerInvoiceWriteoffDocumentService customerInvoiceWriteoffDocumentService = SpringContext.getBean(CustomerInvoiceWriteoffDocumentService.class);  
111          return customerInvoiceWriteoffDocumentService.getObjectCode(postable, poster, isUsingOrgAcctDefaultWriteoffFAU, isUsingChartForWriteoff, this.getChartOfAccountsCode());
112          }
113      
114      
115      @Override
116      public String getFinancialSubObjectCode() {
117          return GENERAL_LEDGER_PENDING_ENTRY_CODE.getBlankFinancialSubObjectCode(); 
118      }
119    
120       @Override
121        public String getOrganizationReferenceId() {
122            if ( isUsingOrgAcctDefaultWriteoffFAU ){
123                return poster.getOrganizationReferenceIdentifier();
124            } else {
125                return postable.getOrganizationReferenceId();
126            }
127        }
128    
129       @Override
130        public String getProjectCode() {
131            if ( isUsingOrgAcctDefaultWriteoffFAU ){
132                return poster.getProjectCode();
133            } else {
134                return postable.getProjectCode();
135            }
136        }
137    
138       @Override
139        public String getSubAccountNumber() {
140            if ( isUsingOrgAcctDefaultWriteoffFAU ){
141                return poster.getSubAccountNumber();
142            } else {
143                return postable.getSubAccountNumber();
144            }
145        }
146    }