/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.module.ar.document.service.impl; import java.util.HashMap; import java.util.Map; import org.kuali.kfs.module.ar.ArConstants; import org.kuali.kfs.module.ar.businessobject.AccountsReceivableDocumentHeader; import org.kuali.kfs.module.ar.businessobject.OrganizationOptions; import org.kuali.kfs.module.ar.businessobject.SystemInformation; import org.kuali.kfs.module.ar.document.service.AccountsReceivableDocumentHeaderService; import org.kuali.kfs.module.ar.document.service.SystemInformationService; import org.kuali.kfs.sys.businessobject.ChartOrgHolder; import org.kuali.kfs.sys.service.FinancialSystemUserService; import org.kuali.kfs.sys.service.UniversityDateService; import org.kuali.rice.krad.service.BusinessObjectService; import org.kuali.rice.krad.util.GlobalVariables; import org.springframework.transaction.annotation.Transactional; @Transactional public class AccountsReceivableDocumentHeaderServiceImpl implements AccountsReceivableDocumentHeaderService { protected BusinessObjectService businessObjectService; protected FinancialSystemUserService financialSystemUserService; protected UniversityDateService universityDateService; protected SystemInformationService sysInfoService; /** * @see org.kuali.kfs.module.ar.document.service.AccountsReceivableDocumentHeaderService#getNewAccountsReceivableDocumentHeader(java.lang.String, * java.lang.String) */ @Override public AccountsReceivableDocumentHeader getNewAccountsReceivableDocumentHeader(String chartOfAccountsCode, String organizationCode) { AccountsReceivableDocumentHeader accountsReceivableDocumentHeader = new AccountsReceivableDocumentHeader(); // we try to get the processing org directly, which we'll get if the initiating user is an AR Processor SystemInformation processingOrg = getProcessingOrgIfExists(chartOfAccountsCode, organizationCode); if (processingOrg != null) { accountsReceivableDocumentHeader.setProcessingChartOfAccountCode(processingOrg.getProcessingChartOfAccountCode()); accountsReceivableDocumentHeader.setProcessingOrganizationCode(processingOrg.getProcessingOrganizationCode()); return accountsReceivableDocumentHeader; } // next we try to get the processing org through the initiating user's billing org, if that exists OrganizationOptions orgOptions = getOrgOptionsIfExists(chartOfAccountsCode, organizationCode); if (orgOptions != null) { accountsReceivableDocumentHeader.setProcessingChartOfAccountCode(orgOptions.getProcessingChartOfAccountCode()); accountsReceivableDocumentHeader.setProcessingOrganizationCode(orgOptions.getProcessingOrganizationCode()); return accountsReceivableDocumentHeader; } // If we get here, then we didnt find a matching BillingOrg or ProcessingOrg, so we have // no way to retrieve the document processing org. This should never happen if the authorization // is working right, so we're going to puke and die right here. throw new UnsupportedOperationException("Unable to create AR Document Header due to incomplete configuration. Missing or inactive SystemInformation and/or OrganizationOptions for: "+ chartOfAccountsCode +"-"+ organizationCode ); } protected OrganizationOptions getOrgOptionsIfExists(String chartOfAccountsCode, String organizationCode) { Map<String, String> criteria = new HashMap<String, String>(); criteria.put("chartOfAccountsCode", chartOfAccountsCode); criteria.put("organizationCode", organizationCode); return businessObjectService.findByPrimaryKey(OrganizationOptions.class, criteria); } protected SystemInformation getProcessingOrgIfExists(String chartOfAccountsCode, String organizationCode) { return sysInfoService.getByProcessingChartOrgAndFiscalYear(chartOfAccountsCode, organizationCode, universityDateService.getCurrentFiscalYear()); } /** * @see org.kuali.kfs.module.ar.document.service.AccountsReceivableDocumentHeaderService#getNewAccountsReceivableDocumentHeaderForCurrentUser() */ @Override public AccountsReceivableDocumentHeader getNewAccountsReceivableDocumentHeaderForCurrentUser() { ChartOrgHolder currentUser = financialSystemUserService.getPrimaryOrganization(GlobalVariables.getUserSession().getPerson(), ArConstants.AR_NAMESPACE_CODE); return getNewAccountsReceivableDocumentHeader(currentUser.getChartOfAccountsCode(), currentUser.getOrganizationCode()); } public BusinessObjectService getBusinessObjectService() { return businessObjectService; } public void setBusinessObjectService(BusinessObjectService businessObjectService) { this.businessObjectService = businessObjectService; } public void setUniversityDateService(UniversityDateService universityDateService) { this.universityDateService = universityDateService; } public void setSysInfoService(SystemInformationService sysInfoService) { this.sysInfoService = sysInfoService; } public FinancialSystemUserService getFinancialSystemUserService() { return financialSystemUserService; } public void setFinancialSystemUserService(FinancialSystemUserService financialSystemUserService) { this.financialSystemUserService = financialSystemUserService; } }