/*
* 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.service.impl;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.kuali.kfs.module.ar.businessobject.CustomerAddress;
import org.kuali.kfs.module.ar.document.service.CustomerAddressService;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.kfs.sys.util.TransactionalServiceUtils;
import org.kuali.rice.core.api.datetime.DateTimeService;
import org.kuali.rice.krad.service.BusinessObjectService;
import org.kuali.rice.krad.service.SequenceAccessorService;
import org.kuali.rice.krad.util.ObjectUtils;
import org.springframework.transaction.annotation.Transactional;
@Transactional
public class CustomerAddressServiceImpl implements CustomerAddressService {
private BusinessObjectService businessObjectService;
private SequenceAccessorService sequenceAccessorService;
private DateTimeService dateTimeService;
protected static final String CUST_ADDR_ID_SEQ = "CUST_ADDR_ID_SEQ";
@Override
@SuppressWarnings("unchecked")
public CustomerAddress getByPrimaryKey(String customerNumber, Integer customerAddressIdentifier) {
CustomerAddress customerAddress = null;
if (StringUtils.isNotBlank(customerNumber) && ObjectUtils.isNotNull(customerAddressIdentifier)) {
Map criteria = new HashMap();
criteria.put(KFSPropertyConstants.CUSTOMER_NUMBER, customerNumber);
criteria.put(KFSPropertyConstants.CUSTOMER_ADDRESS_IDENTIFIER, customerAddressIdentifier);
customerAddress = businessObjectService.findByPrimaryKey(CustomerAddress.class, criteria);
}
return customerAddress;
}
@Override
@SuppressWarnings("unchecked")
public CustomerAddress getPrimaryAddress(String customerNumber) {
CustomerAddress primaryAddress = null;
if (StringUtils.isNotBlank(customerNumber)) {
Map criteria = new HashMap();
criteria.put(KFSPropertyConstants.CUSTOMER_NUMBER, customerNumber);
criteria.put(KFSPropertyConstants.CUSTOMER_ADDRESS_TYPE_CODE, "P");
Collection<CustomerAddress> primaryAddresses = businessObjectService.findMatching(CustomerAddress.class, criteria);
if (!CollectionUtils.isEmpty(primaryAddresses)) {
primaryAddress = TransactionalServiceUtils.retrieveFirstAndExhaustIterator(primaryAddresses.iterator());
}
}
return primaryAddress;
}
/**
* This method returns true if customer address is active
*
* @param customerNumber
* @param customerAddressIdentifier
* @return
*/
@Override
public boolean customerAddressActive(String customerNumber, Integer customerAddressIdentifier) {
CustomerAddress customerAddress = getByPrimaryKey(customerNumber, customerAddressIdentifier);
if (ObjectUtils.isNotNull(customerAddress)) {
if (ObjectUtils.isNotNull(customerAddress.getCustomerAddressEndDate())) {
Timestamp currentDateTimestamp = new Timestamp(dateTimeService.getCurrentDate().getTime());
Timestamp addressEndDateTimestamp = new Timestamp(customerAddress.getCustomerAddressEndDate().getTime());
if (addressEndDateTimestamp.before(currentDateTimestamp)) {
return false;
}
}
}
return true;
}
public BusinessObjectService getBusinessObjectService() {
return businessObjectService;
}
public void setBusinessObjectService(BusinessObjectService businessObjectService) {
this.businessObjectService = businessObjectService;
}
/**
* @see org.kuali.kfs.module.ar.document.service.CustomerAddressService#customerAddressExists(java.lang.String, java.lang.Integer)
*/
@Override
public boolean customerAddressExists(String customerNumber, Integer customerAddressIdentifier) {
return ObjectUtils.isNotNull(getByPrimaryKey(customerNumber, customerAddressIdentifier));
}
/**
* @see org.kuali.kfs.module.ar.document.service.CustomerAddressService#getNextCustomerAddressIdentifier()
*/
@Override
public Integer getNextCustomerAddressIdentifier() {
Long nextId = sequenceAccessorService.getNextAvailableSequenceNumber(
CUST_ADDR_ID_SEQ, CustomerAddress.class);
return nextId.intValue();
}
/**
* This method gets the sequenceAccessorService
*
* @return
*/
public SequenceAccessorService getSequenceAccessorService() {
return sequenceAccessorService;
}
/**
* This method sets the sequenceAccessorService
*
* @param sequenceAccessorService
*/
public void setSequenceAccessorService(SequenceAccessorService sequenceAccessorService) {
this.sequenceAccessorService = sequenceAccessorService;
}
public void setDateTimeService(DateTimeService dateTimeService) {
this.dateTimeService = dateTimeService;
}
}