package com.salesmanager.core.business.services.customer; import java.util.List; import javax.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import com.salesmanager.core.business.exception.ServiceException; import com.salesmanager.core.business.repositories.customer.CustomerRepository; import com.salesmanager.core.business.services.common.generic.SalesManagerEntityServiceImpl; import com.salesmanager.core.business.services.customer.attribute.CustomerAttributeService; import com.salesmanager.core.model.common.Address; import com.salesmanager.core.model.customer.Customer; import com.salesmanager.core.model.customer.CustomerCriteria; import com.salesmanager.core.model.customer.CustomerList; import com.salesmanager.core.model.customer.attribute.CustomerAttribute; import com.salesmanager.core.model.merchant.MerchantStore; import com.salesmanager.core.modules.utils.GeoLocation; @Service("customerService") public class CustomerServiceImpl extends SalesManagerEntityServiceImpl<Long, Customer> implements CustomerService { private static final Logger LOGGER = LoggerFactory.getLogger(CustomerServiceImpl.class); private CustomerRepository customerRepository; @Inject private CustomerAttributeService customerAttributeService; @Inject private GeoLocation geoLocation; @Inject public CustomerServiceImpl(CustomerRepository customerRepository) { super(customerRepository); this.customerRepository = customerRepository; } @Override public List<Customer> getByName(String firstName) { return customerRepository.findByName(firstName); } @Override public Customer getById(Long id) { return customerRepository.findOne(id); } @Override public Customer getByNick(String nick) { return customerRepository.findByNick(nick); } @Override public Customer getByNick(String nick, int storeId) { return customerRepository.findByNick(nick, storeId); } @Override public List<Customer> listByStore(MerchantStore store) { return customerRepository.findByStore(store.getId()); } @Override public CustomerList listByStore(MerchantStore store, CustomerCriteria criteria) { return customerRepository.listByStore(store,criteria); } @Override public Address getCustomerAddress(MerchantStore store, String ipAddress) throws ServiceException { try { return geoLocation.getAddress(ipAddress); } catch(Exception e) { throw new ServiceException(e); } } @Override public void saveOrUpdate(Customer customer) throws ServiceException { LOGGER.debug("Creating Customer"); if(customer.getId()!=null && customer.getId()>0) { super.update(customer); } else { super.create(customer); } } public void delete(Customer customer) throws ServiceException { customer = getById(customer.getId()); //delete attributes List<CustomerAttribute> attributes =customerAttributeService.getByCustomer(customer.getMerchantStore(), customer); if(attributes!=null) { for(CustomerAttribute attribute : attributes) { customerAttributeService.delete(attribute); } } customerRepository.delete(customer); } }