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.authorization; 017 018 import java.util.Collection; 019 import java.util.Map; 020 021 import org.apache.commons.lang.StringUtils; 022 import org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail; 023 import org.kuali.kfs.module.ar.document.CustomerInvoiceWriteoffDocument; 024 import org.kuali.kfs.module.ar.document.service.CustomerInvoiceDocumentService; 025 import org.kuali.kfs.sys.context.SpringContext; 026 import org.kuali.kfs.sys.document.authorization.FinancialSystemTransactionalDocumentAuthorizerBase; 027 import org.kuali.kfs.sys.identity.KfsKimAttributes; 028 import org.kuali.rice.kns.bo.BusinessObject; 029 030 public class CustomerInvoiceWriteoffDocumentAuthorizer extends FinancialSystemTransactionalDocumentAuthorizerBase { 031 032 @Override 033 protected void addRoleQualification(BusinessObject businessObject, Map<String, String> attributes) { 034 super.addRoleQualification(businessObject, attributes); 035 036 CustomerInvoiceWriteoffDocument writeoffDoc = (CustomerInvoiceWriteoffDocument) businessObject; 037 String invoiceDocNumber = writeoffDoc.getFinancialDocumentReferenceInvoiceNumber(); 038 if (StringUtils.isBlank(invoiceDocNumber)) { 039 return; 040 } 041 CustomerInvoiceDocumentService invoiceService = SpringContext.getBean(CustomerInvoiceDocumentService.class); 042 043 Collection<CustomerInvoiceDetail> invoiceDetails = invoiceService.getCustomerInvoiceDetailsForCustomerInvoiceDocument(invoiceDocNumber); 044 045 // adds the chart/account for each account used on the original invoice that will be credited by this 046 for (CustomerInvoiceDetail invoiceDetail : invoiceDetails) { 047 if (StringUtils.isNotBlank(invoiceDetail.getChartOfAccountsCode()) && StringUtils.isNotBlank(invoiceDetail.getAccountNumber())) { 048 attributes.put(KfsKimAttributes.CHART_OF_ACCOUNTS_CODE, invoiceDetail.getChartOfAccountsCode()); 049 attributes.put(KfsKimAttributes.ACCOUNT_NUMBER, invoiceDetail.getAccountNumber()); 050 } 051 } 052 } 053 054 //TODO Dont remove this until we're sure the FAU stuff is really in KIM 055 // /** 056 // * @see org.kuali.rice.kns.document.authorization.DocumentAuthorizerBase#canInitiate(java.lang.String, 057 // * org.kuali.rice.kim.bo.Person) 058 // */ 059 // @Override 060 // public void canInitiate(String documentTypeName, Person user) throws DocumentTypeAuthorizationException { 061 // super.canInitiate(documentTypeName, user); 062 // 063 // if (!ARUtil.isUserInArBillingOrg(user)) { 064 // throw new DocumentInitiationAuthorizationException(ArKeyConstants.ERROR_ORGANIZATION_OPTIONS_MUST_BE_SET_FOR_USER_ORG, 065 // new String[] { "(Users in an AR Billing Org)", "Customer Invoice WriteOff" }); 066 // } 067 // 068 // // if writeoff option is set up for to use organization accounting default FAU, those values must exist before a writeoff 069 // // document can be initiated 070 // /* 071 // String writeoffGenerationOption = SpringContext.getBean(ParameterService.class).getParameterValue(CustomerInvoiceWriteoffDocument.class, ArConstants.GLPE_WRITEOFF_GENERATION_METHOD); 072 // boolean isUsingOrgAcctDefaultWriteoffFAU = ArConstants.GLPE_WRITEOFF_GENERATION_METHOD_ORG_ACCT_DEFAULT.equals(writeoffGenerationOption); 073 // if (isUsingOrgAcctDefaultWriteoffFAU) { 074 // 075 // Integer currentUniversityFiscalYear = SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear(); 076 // 077 // criteria = new HashMap<String, Object>(); 078 // criteria.put("universityFiscalYear", currentUniversityFiscalYear); 079 // criteria.put("chartOfAccountsCode", chartUser.getChartOfAccountsCode()); 080 // criteria.put("organizationCode", chartUser.getOrganizationCode()); 081 // OrganizationAccountingDefault organizationAccountingDefault = (OrganizationAccountingDefault) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(OrganizationAccountingDefault.class, criteria); 082 // 083 // // check if org. acct. default exists 084 // if (ObjectUtils.isNull(organizationAccountingDefault)) { 085 // throw new DocumentInitiationAuthorizationException(ArConstants.ERROR_ORG_ACCT_DEFAULT_FOR_USER_MUST_EXIST, new String[] {}); 086 // } 087 // //check if org acct. default writeoff chart, object, or account number are empty 088 // else if (StringUtils.isEmpty(organizationAccountingDefault.getWriteoffAccountNumber()) || StringUtils.isEmpty(organizationAccountingDefault.getWriteoffChartOfAccountsCode()) || StringUtils.isEmpty(organizationAccountingDefault.getWriteoffFinancialObjectCode())) { 089 // throw new DocumentInitiationAuthorizationException(ArConstants.ERROR_ORG_ACCT_DEFAULT_WRITEOFF_MUST_EXIST, new String[] {}); 090 // } 091 // }*/ 092 // } 093 094 } 095