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 }