/*
* 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;
import java.util.List;
import java.util.Map;
import org.kuali.kfs.module.ar.ArConstants;
import org.kuali.kfs.module.ar.ArKeyConstants;
import org.kuali.kfs.module.ar.businessobject.OrganizationOptions;
import org.kuali.kfs.module.ar.businessobject.SystemInformation;
import org.kuali.kfs.module.ar.document.service.SystemInformationService;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.document.FinancialSystemMaintainable;
import org.kuali.kfs.sys.service.FinancialSystemUserService;
import org.kuali.kfs.sys.service.UniversityDateService;
import org.kuali.rice.kim.api.identity.Person;
import org.kuali.rice.kns.document.MaintenanceDocument;
import org.kuali.rice.krad.maintenance.MaintenanceLock;
import org.kuali.rice.krad.util.GlobalVariables;
public class OrganizationOptionsMaintainableImpl extends FinancialSystemMaintainable {
private OrganizationOptions newOptions;
private OrganizationOptions oldOptions;
/**
*
* @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#generateMaintenanceLocks()
*/
@Override
public List<MaintenanceLock> generateMaintenanceLocks() {
List<MaintenanceLock> maintenanceLocks = super.generateMaintenanceLocks();
maintenanceLocks.addAll(CustomerInvoiceItemCodeMaintainableImplUtil.generateCustomerInvoiceItemCodeMaintenanceLocks(getBusinessObject(), getDocumentNumber()));
return maintenanceLocks;
}
/**
*
* @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#processAfterNew(org.kuali.rice.kns.document.MaintenanceDocument, java.util.Map)
*/
@Override
public void processAfterNew(MaintenanceDocument document, Map<String,String[]> parameters) {
super.processAfterNew(document, parameters);
initializeAttributes(document);
Person finSysUser = GlobalVariables.getUserSession().getPerson();
String chartAccountsCode = SpringContext.getBean(FinancialSystemUserService.class).getPrimaryOrganization(finSysUser, ArConstants.AR_NAMESPACE_CODE).getChartOfAccountsCode();
newOptions.setProcessingChartOfAccountCode(chartAccountsCode);
String organizationCode = SpringContext.getBean(FinancialSystemUserService.class).getPrimaryOrganization(finSysUser, ArConstants.AR_NAMESPACE_CODE).getOrganizationCode();
newOptions.setProcessingOrganizationCode(organizationCode);
updateRemitToAddress(chartAccountsCode, organizationCode);
}
@Override
public void setGenerateBlankRequiredValues(String docTypeName) {
}
/**
* This method gets old and new maintainable objects and creates convenience handles to them
*
* @param document OrganizationOptions document
*/
private void initializeAttributes(MaintenanceDocument document) {
if (newOptions == null) {
newOptions = (OrganizationOptions) document.getNewMaintainableObject().getBusinessObject();
}
if (oldOptions == null) {
oldOptions = (OrganizationOptions) document.getOldMaintainableObject().getBusinessObject();
}
}
/**
*
* @see org.kuali.rice.kns.maintenance.KualiMaintainableImpl#refresh(java.lang.String, java.util.Map, org.kuali.rice.kns.document.MaintenanceDocument)
*/
@Override
public void refresh(String refreshCaller, Map fieldValues, MaintenanceDocument document) {
super.refresh(refreshCaller, fieldValues, document);
this.initializeAttributes(document);
// Handle refreshing remit to address if processing chart and org have changed
String chartCode = (String)fieldValues.get(KFSConstants.MAINTENANCE_NEW_MAINTAINABLE + KFSPropertyConstants.PROCESSING_CHART_OF_ACCT_CD);
String orgCode = (String)fieldValues.get(KFSConstants.MAINTENANCE_NEW_MAINTAINABLE + KFSPropertyConstants.PROCESSING_ORGANIZATION_CODE);
if(chartCode!=null && orgCode!=null) {
updateRemitToAddress(chartCode, orgCode);
}
}
/**
*
* This method...
* @param chartCode
* @param orgCode
*/
private void updateRemitToAddress(String chartCode, String orgCode) {
UniversityDateService universityDateService = SpringContext.getBean(UniversityDateService.class);
SystemInformation sysInfo = SpringContext.getBean(SystemInformationService.class).getByProcessingChartOrgAndFiscalYear(chartCode, orgCode, universityDateService.getCurrentFiscalYear());
if(sysInfo != null) {
newOptions.setOrganizationRemitToAddressName(sysInfo.getOrganizationRemitToAddressName());
newOptions.setOrganizationRemitToLine1StreetAddress(sysInfo.getOrganizationRemitToLine1StreetAddress());
newOptions.setOrganizationRemitToLine2StreetAddress(sysInfo.getOrganizationRemitToLine2StreetAddress());
newOptions.setOrganizationRemitToCityName(sysInfo.getOrganizationRemitToCityName());
newOptions.setOrganizationRemitToStateCode(sysInfo.getOrganizationRemitToStateCode());
newOptions.setOrganizationRemitToZipCode(sysInfo.getOrganizationRemitToZipCode());
// Add message here to notify user that remit to address has been updated
}
else {
GlobalVariables.getMessageMap().putError(KFSConstants.MAINTENANCE_NEW_MAINTAINABLE + KFSPropertyConstants.PROCESSING_CHART_OF_ACCT_CD, ArKeyConstants.OrganizationOptionsErrors.SYS_INFO_DOES_NOT_EXIST_FOR_PROCESSING_CHART_AND_ORG, new String[] {chartCode, orgCode});
}
}
}