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