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; 017 018 import java.util.List; 019 import java.util.Map; 020 021 import org.kuali.kfs.module.ar.ArConstants; 022 import org.kuali.kfs.module.ar.ArKeyConstants; 023 import org.kuali.kfs.module.ar.ArPropertyConstants; 024 import org.kuali.kfs.module.ar.businessobject.OrganizationOptions; 025 import org.kuali.kfs.module.ar.businessobject.SystemInformation; 026 import org.kuali.kfs.module.ar.document.service.SystemInformationService; 027 import org.kuali.kfs.sys.KFSConstants; 028 import org.kuali.kfs.sys.context.SpringContext; 029 import org.kuali.kfs.sys.document.FinancialSystemMaintainable; 030 import org.kuali.kfs.sys.service.FinancialSystemUserService; 031 import org.kuali.kfs.sys.service.UniversityDateService; 032 import org.kuali.rice.kim.bo.Person; 033 import org.kuali.rice.kns.document.MaintenanceDocument; 034 import org.kuali.rice.kns.document.MaintenanceLock; 035 import org.kuali.rice.kns.util.GlobalVariables; 036 037 public class OrganizationOptionsMaintainableImpl extends FinancialSystemMaintainable { 038 039 private OrganizationOptions newOptions; 040 private OrganizationOptions oldOptions; 041 042 /** 043 * 044 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#generateMaintenanceLocks() 045 */ 046 public List<MaintenanceLock> generateMaintenanceLocks() { 047 List<MaintenanceLock> maintenanceLocks = super.generateMaintenanceLocks(); 048 maintenanceLocks.addAll(CustomerInvoiceItemCodeMaintainableImplUtil.generateCustomerInvoiceItemCodeMaintenanceLocks(getBusinessObject(), documentNumber)); 049 return maintenanceLocks; 050 } 051 052 /** 053 * 054 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#processAfterNew(org.kuali.rice.kns.document.MaintenanceDocument, java.util.Map) 055 */ 056 public void processAfterNew(MaintenanceDocument document, Map<String,String[]> parameters) { 057 super.processAfterNew(document, parameters); 058 059 initializeAttributes(document); 060 //document.getNewMaintainableObject().setGenerateDefaultValues(false); 061 062 Person finSysUser = GlobalVariables.getUserSession().getPerson(); 063 064 String chartAccountsCode = SpringContext.getBean(FinancialSystemUserService.class).getPrimaryOrganization(finSysUser, ArConstants.AR_NAMESPACE_CODE).getChartOfAccountsCode(); 065 newOptions.setProcessingChartOfAccountCode(chartAccountsCode); 066 067 String organizationCode = SpringContext.getBean(FinancialSystemUserService.class).getPrimaryOrganization(finSysUser, ArConstants.AR_NAMESPACE_CODE).getOrganizationCode(); 068 newOptions.setProcessingOrganizationCode(organizationCode); 069 070 updateRemitToAddress(chartAccountsCode, organizationCode); 071 } 072 073 @Override 074 public void setGenerateBlankRequiredValues(String docTypeName) { 075 076 } 077 078 /** 079 * This method gets old and new maintainable objects and creates convenience handles to them 080 * 081 * @param document OrganizationOptions document 082 */ 083 private void initializeAttributes(MaintenanceDocument document) { 084 if (newOptions == null) { 085 newOptions = (OrganizationOptions) document.getNewMaintainableObject().getBusinessObject(); 086 } 087 if (oldOptions == null) { 088 oldOptions = (OrganizationOptions) document.getOldMaintainableObject().getBusinessObject(); 089 } 090 } 091 092 /** 093 * 094 * @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#refresh(java.lang.String, java.util.Map, org.kuali.rice.kns.document.MaintenanceDocument) 095 */ 096 public void refresh(String refreshCaller, Map fieldValues, MaintenanceDocument document) { 097 super.refresh(refreshCaller, fieldValues, document); 098 099 this.initializeAttributes(document); 100 101 // Handle refreshing remit to address if processing chart and org have changed 102 String chartCode = (String)fieldValues.get(KFSConstants.MAINTENANCE_NEW_MAINTAINABLE + ArPropertyConstants.OrganizationOptionsFields.PROCESSING_CHART_OF_ACCOUNTS_CODE); 103 String orgCode = (String)fieldValues.get(KFSConstants.MAINTENANCE_NEW_MAINTAINABLE + ArPropertyConstants.OrganizationOptionsFields.PROCESSING_ORGANIZATION_CODE); 104 if(chartCode!=null && orgCode!=null) { 105 updateRemitToAddress(chartCode, orgCode); 106 } 107 } 108 109 /** 110 * 111 * This method... 112 * @param chartCode 113 * @param orgCode 114 */ 115 private void updateRemitToAddress(String chartCode, String orgCode) { 116 UniversityDateService universityDateService = SpringContext.getBean(UniversityDateService.class); 117 SystemInformation sysInfo = SpringContext.getBean(SystemInformationService.class).getByProcessingChartOrgAndFiscalYear(chartCode, orgCode, universityDateService.getCurrentFiscalYear()); 118 119 if(sysInfo != null) { 120 newOptions.setOrganizationRemitToAddressName(sysInfo.getOrganizationRemitToAddressName()); 121 newOptions.setOrganizationRemitToLine1StreetAddress(sysInfo.getOrganizationRemitToLine1StreetAddress()); 122 newOptions.setOrganizationRemitToLine2StreetAddress(sysInfo.getOrganizationRemitToLine2StreetAddress()); 123 newOptions.setOrganizationRemitToCityName(sysInfo.getOrganizationRemitToCityName()); 124 newOptions.setOrganizationRemitToStateCode(sysInfo.getOrganizationRemitToStateCode()); 125 newOptions.setOrganizationRemitToZipCode(sysInfo.getOrganizationRemitToZipCode()); 126 // Add message here to notify user that remit to address has been updated 127 } 128 else { 129 GlobalVariables.getMessageMap().putError(KFSConstants.MAINTENANCE_NEW_MAINTAINABLE + ArPropertyConstants.OrganizationOptionsFields.PROCESSING_CHART_OF_ACCOUNTS_CODE, ArKeyConstants.OrganizationOptionsErrors.SYS_INFO_DOES_NOT_EXIST_FOR_PROCESSING_CHART_AND_ORG, new String[] {chartCode, orgCode}); 130 } 131 } 132 133 } 134