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