/* * 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.external.kc.service.impl; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.kuali.kfs.coa.businessobject.Account; import org.kuali.kfs.coa.businessobject.ObjectCode; import org.kuali.kfs.coa.service.ObjectCodeService; import org.kuali.kfs.fp.businessobject.BudgetAdjustmentAccountingLine; import org.kuali.kfs.fp.businessobject.BudgetAdjustmentSourceAccountingLine; import org.kuali.kfs.fp.businessobject.BudgetAdjustmentTargetAccountingLine; import org.kuali.kfs.fp.document.BudgetAdjustmentDocument; import org.kuali.kfs.integration.cg.dto.BudgetAdjustmentCreationStatusDTO; import org.kuali.kfs.integration.cg.dto.BudgetAdjustmentParametersDTO; import org.kuali.kfs.integration.cg.dto.BudgetAdjustmentParametersDTO.Details; import org.kuali.kfs.module.external.kc.KcConstants; import org.kuali.kfs.module.external.kc.service.AccountCreationService; import org.kuali.kfs.module.external.kc.service.BudgetAdjustmentService; import org.kuali.kfs.module.external.kc.util.GlobalVariablesExtractHelper; import org.kuali.kfs.module.external.kc.util.KcUtils; import org.kuali.kfs.sys.KFSConstants; import org.kuali.kfs.sys.businessobject.AccountingLine; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.coreservice.framework.parameter.ParameterService; import org.kuali.rice.kim.api.identity.Person; import org.kuali.rice.kim.api.identity.PersonService; import org.kuali.rice.kns.service.DataDictionaryService; import org.kuali.rice.kns.service.MaintenanceDocumentDictionaryService; import org.kuali.rice.kns.service.TransactionalDocumentDictionaryService; import org.kuali.rice.krad.UserSession; import org.kuali.rice.krad.document.Document; import org.kuali.rice.krad.document.DocumentAuthorizer; import org.kuali.rice.krad.exception.ValidationException; import org.kuali.rice.krad.maintenance.MaintenanceDocumentAuthorizerBase; import org.kuali.rice.krad.rules.rule.event.BlanketApproveDocumentEvent; import org.kuali.rice.krad.rules.rule.event.RouteDocumentEvent; import org.kuali.rice.krad.rules.rule.event.SaveDocumentEvent; import org.kuali.rice.krad.service.BusinessObjectService; import org.kuali.rice.krad.service.DocumentService; import org.kuali.rice.krad.service.KualiRuleService; import org.kuali.rice.krad.util.GlobalVariables; public class BudgetAdjustmentServiceImpl implements BudgetAdjustmentService { private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(BudgetAdjustmentServiceImpl.class); protected DocumentService documentService; protected ParameterService parameterService; protected DataDictionaryService dataDictionaryService; protected BusinessObjectService businessObjectService; protected AccountCreationService accountCreationService; protected ObjectCodeService objectCodeService; protected TransactionalDocumentDictionaryService transactionalDocumentDictionaryService; protected KualiRuleService kualiRuleService; protected PersonService personService; protected MaintenanceDocumentDictionaryService maintenanceDocumentDictionaryService; /** * This is the web service method that facilitates budget adjustment 1. Creates a Budget Adjustment Doc using the parameters * from KC 2. Returns the status object * * @param BudgetAdjustmentParametersDTO * @return BudgetAdjustmentStatusDTO */ @Override public BudgetAdjustmentCreationStatusDTO createBudgetAdjustment(BudgetAdjustmentParametersDTO budgetAdjustmentParameters) { BudgetAdjustmentDocument budgetAdjustmentDoc = null; BudgetAdjustmentCreationStatusDTO budgetAdjustmentCreationStatus = new BudgetAdjustmentCreationStatusDTO(); budgetAdjustmentCreationStatus.setErrorMessages(new ArrayList<String>()); budgetAdjustmentCreationStatus.setStatus(KcConstants.KcWebService.STATUS_KC_SUCCESS); // check to see if the user has the permission to create account String principalId = budgetAdjustmentParameters.getPrincipalId(); if (!isValidUser(principalId)) { budgetAdjustmentCreationStatus.getErrorMessages().add(KcUtils.getErrorMessage(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_INVALID_USER, new String[]{principalId})); budgetAdjustmentCreationStatus.setStatus(KcConstants.KcWebService.STATUS_KC_FAILURE); return budgetAdjustmentCreationStatus; } try { // create a Budget Adjustment object budgetAdjustmentDoc = createBudgetAdjustmentObject( budgetAdjustmentCreationStatus); if (!isValidParameters(budgetAdjustmentDoc.getPostingYear(), budgetAdjustmentCreationStatus, budgetAdjustmentParameters)) { return budgetAdjustmentCreationStatus; } // create a Budget Adjustment object, then route if successful if( populateBudgetAdjustmentDocDetails(budgetAdjustmentParameters, budgetAdjustmentDoc, budgetAdjustmentCreationStatus) ){ routeBudgetAdjustmentDocument(budgetAdjustmentDoc, budgetAdjustmentCreationStatus); }else{ //return as we have a failure return budgetAdjustmentCreationStatus; } } catch (Exception ex) { this.setFailStatus(budgetAdjustmentCreationStatus, KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_ACCOUNT_GENERATION_PROBLEM); return budgetAdjustmentCreationStatus; } // set required values to AccountCreationStatus if (budgetAdjustmentCreationStatus.getStatus().equals(KcConstants.KcWebService.STATUS_KC_SUCCESS) && getDocumentService().documentExists(budgetAdjustmentDoc.getDocumentHeader().getDocumentNumber())) { budgetAdjustmentCreationStatus.setDocumentNumber(budgetAdjustmentDoc.getDocumentNumber()); } else { // save the document try { try{ GlobalVariables.getMessageMap().clearErrorMessages(); getDocumentService().saveDocument(budgetAdjustmentDoc); }catch(ValidationException ve){ } budgetAdjustmentCreationStatus.setDocumentNumber(budgetAdjustmentDoc.getDocumentNumber()); } catch (Exception ex) { LOG.error( KcUtils.getErrorMessage(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_WORKFLOW_EXCEPTION_DOCUMENT_NOT_SAVED, null) + ": " + ex.getMessage()); budgetAdjustmentCreationStatus.setErrorMessages(GlobalVariablesExtractHelper.extractGlobalVariableErrors()); budgetAdjustmentCreationStatus.setStatus(KcConstants.KcWebService.STATUS_KC_FAILURE); } } return budgetAdjustmentCreationStatus; } protected boolean checkforEmptyField(BudgetAdjustmentCreationStatusDTO budgetAdjustmentCreationStatusDTO, String fieldName, String value, int lineNumber) { if ((value == null) || value.isEmpty()) { if (lineNumber != 0) { value = "Detail " + lineNumber + " " + value; } String message = GlobalVariablesExtractHelper.replaceTokens(KcConstants.BudgetAdjustmentService.AUTOMATCICG_ACCOUNT_MAINTENANCE_CHART_REQUIRED_FIELD, fieldName); this.setFailStatus(budgetAdjustmentCreationStatusDTO, message); return false; } return true; } protected void setFailStatus(BudgetAdjustmentCreationStatusDTO budgetAdjustmentCreationStatusDTO, String message) { budgetAdjustmentCreationStatusDTO.getErrorMessages().add(message); budgetAdjustmentCreationStatusDTO.setStatus(KcConstants.KcWebService.STATUS_KC_FAILURE); } protected boolean isValidParameters(Integer postingFiscalYear, BudgetAdjustmentCreationStatusDTO budgetAdjustmentCreationStatusDTO, BudgetAdjustmentParametersDTO budgetAdjustmentParameters) { boolean isValid = true; boolean isValidAcct = true; isValid &= checkforEmptyField(budgetAdjustmentCreationStatusDTO, "Description", budgetAdjustmentParameters.getDescription(), 0); List<Details> details = budgetAdjustmentParameters.getDetails(); int lineNumber = 0; for (Details detail : details) { lineNumber++; isValid &= checkforEmptyField(budgetAdjustmentCreationStatusDTO, "Account", detail.getAccount(), lineNumber); isValid &= checkforEmptyField(budgetAdjustmentCreationStatusDTO, "Chart", detail.getChart(), lineNumber); isValid &= checkforEmptyField(budgetAdjustmentCreationStatusDTO, "Object Code", detail.getObjectCode(), lineNumber); isValid &= checkforEmptyField(budgetAdjustmentCreationStatusDTO, "Amount", detail.getCurrentAmount(), lineNumber); if (!KualiDecimal.isNumeric(detail.getCurrentAmount())) { isValid = false; String message = GlobalVariablesExtractHelper.replaceTokens(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_AMT_IS_NONUMERIC, detail.getObjectCode(), detail.getCurrentAmount()); this.setFailStatus(budgetAdjustmentCreationStatusDTO, message); } else { // test if amount is non zero KualiDecimal amt = new KualiDecimal(detail.getCurrentAmount()); if (amt.isZero()) { isValid = false; String message = GlobalVariablesExtractHelper.replaceTokens(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_AMT_IS_NONUMERIC, detail.getObjectCode(), detail.getCurrentAmount()); this.setFailStatus(budgetAdjustmentCreationStatusDTO, message); } } if (isValidAcct && (!accountCreationService.isValidChartAccount(detail.getChart(), detail.getAccount()))) { isValid = false; isValidAcct = false; String message = GlobalVariablesExtractHelper.replaceTokens(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_INVALID_ACCT, detail.getChart(), detail.getAccount()); this.setFailStatus(budgetAdjustmentCreationStatusDTO, message); } else { ObjectCode objCode = objectCodeService.getByPrimaryId(postingFiscalYear, detail.getChart(), detail.getObjectCode()); if (objCode == null) { isValid = false; String message = GlobalVariablesExtractHelper.replaceTokens(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_INVALID_OBJECTCODE, detail.getChart(), detail.getObjectCode()); this.setFailStatus(budgetAdjustmentCreationStatusDTO, message); } else if (!objCode.isFinancialObjectActiveCode()) { isValid = false; String message = GlobalVariablesExtractHelper.replaceTokens(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_INACTIVE_OBJECTCODE, detail.getChart(), detail.getObjectCode(), postingFiscalYear.toString()); this.setFailStatus(budgetAdjustmentCreationStatusDTO, message); } } } return isValid; } /** * This method creates an account to be used for automatic maintenance document * * @param AccountParametersDTO * @return Account */ protected BudgetAdjustmentDocument createBudgetAdjustmentObject(BudgetAdjustmentCreationStatusDTO budgetAdjustmentCreationStatus) { BudgetAdjustmentDocument budgetAdjustmentDocument = (BudgetAdjustmentDocument) createBADocument(budgetAdjustmentCreationStatus); // also populates posting year budgetAdjustmentDocument.initiateDocument(); return budgetAdjustmentDocument; } protected boolean populateBudgetAdjustmentDocDetails(BudgetAdjustmentParametersDTO parameters, BudgetAdjustmentDocument budgetAdjustmentDocument, BudgetAdjustmentCreationStatusDTO budgetAdjustmentCreationStatus) { boolean methodSuccessful = true; // The Description of the BA document should carry the Award Document Number and Budget Version Number. budgetAdjustmentDocument.getDocumentHeader().setDocumentDescription(parameters.getDescription()); budgetAdjustmentDocument.getDocumentHeader().setExplanation(parameters.getExplanation()); budgetAdjustmentDocument.getDocumentHeader().setOrganizationDocumentNumber(parameters.getOrgDocNumber()); KualiDecimal runningtotal = KualiDecimal.ZERO; Integer fiscalYear = budgetAdjustmentDocument.getPostingYear(); if (parameters.getDetails() != null) { for (BudgetAdjustmentParametersDTO.Details detail : parameters.getDetails()) { if (KualiDecimal.isNumeric(detail.getCurrentAmount())) { KualiDecimal amount = new KualiDecimal(detail.getCurrentAmount()); runningtotal = runningtotal.add(amount); if (amount.isPositive()) { budgetAdjustmentDocument.addTargetAccountingLine(createBudgetAdjustmentTargetAccountingLine(detail,fiscalYear)); } else { budgetAdjustmentDocument.addSourceAccountingLine(createBudgetAdjustmentSourceAccountingLine(detail,fiscalYear)); } } } if (runningtotal.isNonZero()) { boolean success = this.generateIncomeAccountingLine(fiscalYear, parameters.getSponsorType(), budgetAdjustmentDocument, runningtotal); if (!success) { budgetAdjustmentCreationStatus.getErrorMessages().add(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_SYSTEM_PARAMETER_INCORRECT_VALUE + KcConstants.BudgetAdjustmentService.PARAMETER_INCOME_OBJECT_CODES_BY_SPONSOR_TYPE); budgetAdjustmentCreationStatus.setStatus(KcConstants.KcWebService.STATUS_KC_FAILURE); methodSuccessful = false; } } } return methodSuccessful; } protected void populateAccountingLine(BudgetAdjustmentAccountingLine acctLine, Integer postingYear, String chart, String accountNumber, String proj, String objCode, KualiDecimal currentBudgetAdjustmentAmount) { acctLine.setChartOfAccountsCode(chart); acctLine.setAccountNumber(accountNumber); if ((proj != null) && (!proj.isEmpty())) { acctLine.setProjectCode(proj); } acctLine.setFinancialObjectCode(objCode); acctLine.setCurrentBudgetAdjustmentAmount(currentBudgetAdjustmentAmount); acctLine.setPostingYear(postingYear); acctLine.refresh(); } protected BudgetAdjustmentSourceAccountingLine createBudgetAdjustmentSourceAccountingLine(BudgetAdjustmentParametersDTO.Details detail, Integer postingYear) { BudgetAdjustmentSourceAccountingLine budgetAdjustmentSourceAccountingLine = new BudgetAdjustmentSourceAccountingLine(); // from / decrease chart -account KualiDecimal amount = new KualiDecimal(detail.getCurrentAmount()).abs(); populateAccountingLine(budgetAdjustmentSourceAccountingLine, postingYear, detail.getChart(), detail.getAccount(), detail.getProjectCode(), detail.getObjectCode(), amount); return budgetAdjustmentSourceAccountingLine; } protected BudgetAdjustmentTargetAccountingLine createBudgetAdjustmentTargetAccountingLine(BudgetAdjustmentParametersDTO.Details detail, Integer postingYear) { BudgetAdjustmentTargetAccountingLine budgetAdjustmentTargetAccountingLine = new BudgetAdjustmentTargetAccountingLine(); // TO / increase chart -account KualiDecimal amount = new KualiDecimal(detail.getCurrentAmount()).abs(); populateAccountingLine(budgetAdjustmentTargetAccountingLine, postingYear, detail.getChart(), detail.getAccount(), detail.getProjectCode(), detail.getObjectCode(), amount); return budgetAdjustmentTargetAccountingLine; } protected boolean generateIncomeAccountingLine(Integer postingYear, String sponsorType, BudgetAdjustmentDocument baDoc, KualiDecimal amount) { BudgetAdjustmentParametersDTO.Details incomeDetail = new BudgetAdjustmentParametersDTO.Details(); String sponsorCodeMapValue = parameterService.getSubParameterValueAsString(BudgetAdjustmentDocument.class, KcConstants.BudgetAdjustmentService.PARAMETER_INCOME_OBJECT_CODES_BY_SPONSOR_TYPE, sponsorType); if ( StringUtils.isBlank(sponsorCodeMapValue) ) { return false; } if (amount.isNegative()) { // from side AccountingLine accountingLineDetail = baDoc.getSourceAccountingLine(0); BudgetAdjustmentSourceAccountingLine budgetAdjustmentSourceAccountingLine = new BudgetAdjustmentSourceAccountingLine(); populateAccountingLine(budgetAdjustmentSourceAccountingLine,postingYear, accountingLineDetail.getChartOfAccountsCode(), accountingLineDetail.getAccountNumber(), accountingLineDetail.getProjectCode(), sponsorCodeMapValue, amount.abs()); baDoc.addSourceAccountingLine(budgetAdjustmentSourceAccountingLine); } else { AccountingLine accountingLineDetail = baDoc.getTargetAccountingLine(0); BudgetAdjustmentTargetAccountingLine budgetAdjustmentTargetAccountingLine = new BudgetAdjustmentTargetAccountingLine(); populateAccountingLine(budgetAdjustmentTargetAccountingLine,postingYear, accountingLineDetail.getChartOfAccountsCode(), accountingLineDetail.getAccountNumber(), accountingLineDetail.getProjectCode(), sponsorCodeMapValue, amount.abs()); baDoc.addTargetAccountingLine(budgetAdjustmentTargetAccountingLine); } return true; } /** * This method will use the DocumentService to create a new document. The documentTypeName is gathered by using * MaintenanceDocumentDictionaryService which uses Account class to get the document type name. * * @param AccountCreationStatusDTO * @return document returns a new document for the account document type or null if there is an exception thrown. */ protected Document createBADocument(BudgetAdjustmentCreationStatusDTO budgetAdjustmentCreationStatusDTO) { try { Document document = getDocumentService().getNewDocument(transactionalDocumentDictionaryService.getDocumentClassByName("BA")); return document; } catch (Exception e) { budgetAdjustmentCreationStatusDTO.setErrorMessages(GlobalVariablesExtractHelper.extractGlobalVariableErrors()); budgetAdjustmentCreationStatusDTO.setStatus(KcConstants.KcWebService.STATUS_KC_FAILURE); return null; } } /** * This method processes the workflow document actions like save, route and blanket approve depending on the * ACCOUNT_AUTO_CREATE_ROUTE system parameter value. If the system parameter value is not of save or submit or blanketapprove, * put an error message and quit. Throws an document WorkflowException if the specific document action fails to perform. * * @param maintenanceAccountDocument, errorMessages * @return success returns true if the workflow document action is successful else return false. */ protected boolean routeBudgetAdjustmentDocument(BudgetAdjustmentDocument budgetAdjustmentDocument, BudgetAdjustmentCreationStatusDTO budgetAdjustmentCreationStatus) { try { // getParameterService().setParameterForTesting(BudgetAdjustmentDocument.class, // KcConstants.BudgetAdjustmentService.PARAMETER_KC_ADMIN_AUTO_BA_DOCUMENT_WORKFLOW_ROUTE, // KFSConstants.WORKFLOW_DOCUMENT_ROUTE); String BudgetAdjustAutoRouteValue = getParameterService().getParameterValueAsString(BudgetAdjustmentDocument.class, KcConstants.BudgetAdjustmentService.PARAMETER_KC_ADMIN_AUTO_BA_DOCUMENT_WORKFLOW_ROUTE); // String BudgetAdjustAutoRouteValue = getParameterService().getParameterValueAsString(Account.class, // KcConstants.BudgetAdjustmentService.PARAMETER_KC_BA_DOCUMENT_ROUTE); // if the accountAutoCreateRouteValue is not save or submit or blanketApprove then put an error message and quit. if (!BudgetAdjustAutoRouteValue.equalsIgnoreCase(KFSConstants.WORKFLOW_DOCUMENT_SAVE) && !BudgetAdjustAutoRouteValue.equalsIgnoreCase("submit") && !BudgetAdjustAutoRouteValue.equalsIgnoreCase(KFSConstants.WORKFLOW_DOCUMENT_BLANKET_APPROVE)) { budgetAdjustmentCreationStatus.getErrorMessages().add(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_SYSTEM_PARAMETER_INCORRECT_DOCUMENT_ACTION_VALUE); budgetAdjustmentCreationStatus.setStatus(KcConstants.KcWebService.STATUS_KC_FAILURE); return false; } if (BudgetAdjustAutoRouteValue.equalsIgnoreCase(KFSConstants.WORKFLOW_DOCUMENT_SAVE)) { //attempt to save if apply rules were successful and there are no errors boolean rulesPassed = kualiRuleService.applyRules(new SaveDocumentEvent(budgetAdjustmentDocument)); if( rulesPassed && GlobalVariables.getMessageMap().hasNoErrors()){ getDocumentService().saveDocument(budgetAdjustmentDocument); }else{ //get errors from apply rules invocation, also clears global variables budgetAdjustmentCreationStatus.setErrorMessages(GlobalVariablesExtractHelper.extractGlobalVariableErrors()); try{ //save document, and catch VE's as we want to do this silently getDocumentService().saveDocument(budgetAdjustmentDocument); }catch(ValidationException ve){} budgetAdjustmentCreationStatus.setStatus(KcConstants.KcWebService.STATUS_KC_SUCCESS); LOG.error( KcUtils.getErrorMessage(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_BA_RULES_EXCEPTION, new String[]{budgetAdjustmentDocument.getDocumentNumber()})); return false; } } else if (BudgetAdjustAutoRouteValue.equalsIgnoreCase(KFSConstants.WORKFLOW_DOCUMENT_BLANKET_APPROVE)) { //attempt to blanket approve if apply rules were successful and there are no errors boolean rulesPassed = kualiRuleService.applyRules(new BlanketApproveDocumentEvent(budgetAdjustmentDocument)); if( rulesPassed && GlobalVariables.getMessageMap().hasNoErrors()){ getDocumentService().blanketApproveDocument(budgetAdjustmentDocument, "", null); }else{ //get errors from apply rules invocation, also clears global variables budgetAdjustmentCreationStatus.setErrorMessages(GlobalVariablesExtractHelper.extractGlobalVariableErrors()); try{ //save document, and catch VE's as we want to do this silently getDocumentService().saveDocument(budgetAdjustmentDocument); }catch(ValidationException ve){} budgetAdjustmentCreationStatus.setStatus(KcConstants.KcWebService.STATUS_KC_SUCCESS); LOG.error( KcUtils.getErrorMessage(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_BA_RULES_EXCEPTION, new String[]{budgetAdjustmentDocument.getDocumentNumber()})); return false; } } else if (BudgetAdjustAutoRouteValue.equalsIgnoreCase("submit")) { //attempt to blanket approve if apply rules were successful and there are no errors boolean rulesPassed = kualiRuleService.applyRules(new RouteDocumentEvent(budgetAdjustmentDocument)); if( rulesPassed && GlobalVariables.getMessageMap().hasNoErrors()){ getDocumentService().routeDocument(budgetAdjustmentDocument, "", null); }else{ //get errors from apply rules invocation, also clears global variables budgetAdjustmentCreationStatus.setErrorMessages(GlobalVariablesExtractHelper.extractGlobalVariableErrors()); try{ //save document, and catch VE's as we want to do this silently getDocumentService().saveDocument(budgetAdjustmentDocument); }catch(ValidationException ve){} budgetAdjustmentCreationStatus.setStatus(KcConstants.KcWebService.STATUS_KC_SUCCESS); LOG.error( KcUtils.getErrorMessage(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_BA_RULES_EXCEPTION, new String[]{budgetAdjustmentDocument.getDocumentNumber()})); return false; } } return true; } catch (Exception ex) { LOG.error(KcUtils.getErrorMessage(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_WORKFLOW_EXCEPTION_DOCUMENT_ACTIONS,null) + ": " + ex.getMessage()); budgetAdjustmentCreationStatus.setErrorMessages(GlobalVariablesExtractHelper.extractGlobalVariableErrors()); budgetAdjustmentCreationStatus.getErrorMessages().add( KcUtils.getErrorMessage(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_WORKFLOW_EXCEPTION_DOCUMENT_ACTIONS, null) + ": " + ex.getMessage()); budgetAdjustmentCreationStatus.setStatus(KcConstants.KcWebService.STATUS_KC_FAILURE); return false; } } /** * This method check to see if the user can create the account maintenance document and set the user session * * @param String principalId * @return boolean */ protected boolean isValidUser(String principalId) { try { Person user = personService.getPerson(principalId); DocumentAuthorizer documentAuthorizer = new MaintenanceDocumentAuthorizerBase(); if (documentAuthorizer.canInitiate(maintenanceDocumentDictionaryService.getDocumentTypeName(Account.class), user)) { // set the user session so that the user name can be displayed in the saved document GlobalVariables.setUserSession(new UserSession(user.getPrincipalName())); return true; } else { return false; } } catch (Exception ex) { LOG.error( KcUtils.getErrorMessage(KcConstants.BudgetAdjustmentService.ERROR_KC_DOCUMENT_INVALID_USER, new String[]{principalId})); return false; } } /** * Gets the documentService attribute. * * @return Current value of documentService. */ protected DocumentService getDocumentService() { return documentService; } /** * Sets the documentService attribute value. * * @param documentService */ public void setDocumentService(DocumentService documentService) { this.documentService = documentService; } /** * Gets the parameterService attribute. * * @return Returns the parameterService. */ protected ParameterService getParameterService() { return parameterService; } /** * Sets the parameterService attribute value. * * @param parameterService The parameterService to set. */ public void setParameterService(ParameterService parameterService) { this.parameterService = parameterService; } protected DataDictionaryService getDataDictionaryService() { return dataDictionaryService; } public void setDataDictionaryService(DataDictionaryService dataDictionaryService) { this.dataDictionaryService = dataDictionaryService; } /** * Sets the businessObjectService attribute value. * * @param businessObjectService The businessObjectService to set. */ public void setBusinessObjectService(BusinessObjectService businessObjectService) { this.businessObjectService = businessObjectService; } /** * Gets the businessObjectService attribute. * * @return Returns the businessObjectService. */ protected BusinessObjectService getBusinessObjectService() { return businessObjectService; } public AccountCreationService getAccountCreationService() { return accountCreationService; } public void setAccountCreationService(AccountCreationService accountCreationService) { this.accountCreationService = accountCreationService; } public ObjectCodeService getObjectCodeService() { return objectCodeService; } public void setObjectCodeService(ObjectCodeService objectCodeService) { this.objectCodeService = objectCodeService; } public TransactionalDocumentDictionaryService getTransactionalDocumentDictionaryService() { return transactionalDocumentDictionaryService; } public void setTransactionalDocumentDictionaryService(TransactionalDocumentDictionaryService transactionalDocumentDictionaryService) { this.transactionalDocumentDictionaryService = transactionalDocumentDictionaryService; } public KualiRuleService getKualiRuleService() { return kualiRuleService; } public void setKualiRuleService(KualiRuleService kualiRuleService) { this.kualiRuleService = kualiRuleService; } public PersonService getPersonService() { return personService; } public void setPersonService(PersonService personService) { this.personService = personService; } public MaintenanceDocumentDictionaryService getMaintenanceDocumentDictionaryService() { return maintenanceDocumentDictionaryService; } public void setMaintenanceDocumentDictionaryService(MaintenanceDocumentDictionaryService maintenanceDocumentDictionaryService) { this.maintenanceDocumentDictionaryService = maintenanceDocumentDictionaryService; } }