/*
* 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.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.jws.WebParam;
import org.kuali.kfs.integration.ar.AccountsReceivableCustomer;
import org.kuali.kfs.integration.ar.AccountsReceivableCustomerType;
import org.kuali.kfs.integration.ar.AccountsReceivableModuleService;
import org.kuali.kfs.module.external.kc.KcConstants;
import org.kuali.kfs.module.external.kc.businessobject.Agency;
import org.kuali.kfs.module.external.kc.dto.CustomerCreationStatusDto;
import org.kuali.kfs.module.external.kc.dto.CustomerTypeDto;
import org.kuali.kfs.module.external.kc.dto.SponsorDTO;
import org.kuali.kfs.module.external.kc.service.CustomerCreationService;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.rice.core.api.config.property.ConfigurationService;
import org.kuali.rice.krad.UserSession;
import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
import org.kuali.rice.krad.service.KeyValuesService;
import org.kuali.rice.krad.service.ModuleService;
import org.kuali.rice.krad.util.GlobalVariables;
public class CustomerCreationServiceImpl implements CustomerCreationService {
protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(CustomerCreationServiceImpl.class);
private static final String CREATED_BY_AGENCY_DOC = "message.ar.createdByAgencyDocument";
protected ConfigurationService configurationService;
protected AccountsReceivableModuleService accountsReceivableModuleService;
protected KeyValuesService keyValuesService;
@Override
public CustomerCreationStatusDto createCustomer(SponsorDTO sponsor, String initiatedByPrincipalName) {
CustomerCreationStatusDto result = new CustomerCreationStatusDto();
UserSession oldSession = GlobalVariables.getUserSession();
try {
GlobalVariables.setUserSession(new UserSession(KFSConstants.SYSTEM_USER));
Agency agency = new Agency(sponsor);
String description = configurationService.getPropertyValueAsString(CREATED_BY_AGENCY_DOC);
String customerNumber = accountsReceivableModuleService.createAndSaveCustomer(description, agency);
result.setCustomerNumber(customerNumber);
} catch (Exception e) {
result.setErrors(new ArrayList<String>());
result.getErrors().add(e.getMessage());
LOG.error("Unable to create customer.", e);
} finally {
GlobalVariables.setUserSession(oldSession);
}
return result;
}
@Override
public List<CustomerTypeDto> getCustomerTypes() {
List<CustomerTypeDto> dtos = new ArrayList<CustomerTypeDto>();
Collection<AccountsReceivableCustomerType> customerTypes = getKeyValuesService().findAll(AccountsReceivableCustomerType.class);
for (AccountsReceivableCustomerType type : customerTypes) {
CustomerTypeDto dto = new CustomerTypeDto();
dto.setCustomerTypeCode(type.getCustomerTypeCode());
dto.setCustomerTypeDescription(type.getCustomerTypeDescription());
dtos.add(dto);
}
return dtos;
}
@Override
public boolean isValidCustomer(@WebParam(name = KcConstants.CustomerCreationService.CUSTOMER_NUMBER) String customerNumber) {
ModuleService responsibleModuleService = KRADServiceLocatorWeb.getKualiModuleService().getResponsibleModuleService(AccountsReceivableCustomer.class);
if (responsibleModuleService!=null && responsibleModuleService.isExternalizable(AccountsReceivableCustomer.class)) {
Map<String, Object> values = new HashMap<String, Object>();
values.put(KcConstants.CustomerCreationService.CUSTOMER_NUMBER, customerNumber);
return (responsibleModuleService.getExternalizableBusinessObject(AccountsReceivableCustomer.class, values) != null);
} else {
return false;
}
}
protected ConfigurationService getConfigurationService() {
return configurationService;
}
public void setConfigurationService(ConfigurationService configurationService) {
this.configurationService = configurationService;
}
protected AccountsReceivableModuleService getAccountsReceivableModuleService() {
return accountsReceivableModuleService;
}
public void setAccountsReceivableModuleService(AccountsReceivableModuleService accountsReceivableModuleService) {
this.accountsReceivableModuleService = accountsReceivableModuleService;
}
protected KeyValuesService getKeyValuesService() {
if (keyValuesService == null) {
keyValuesService = SpringContext.getBean(KeyValuesService.class);
}
return keyValuesService;
}
public void setKeyValuesService(KeyValuesService keyValuesService) {
this.keyValuesService = keyValuesService;
}
}