package com.salesmanager.core.business.services.catalog.product.manufacturer;
import java.util.HashSet;
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.catalog.product.manufacturer.ManufacturerRepository;
import com.salesmanager.core.business.services.common.generic.SalesManagerEntityServiceImpl;
import com.salesmanager.core.model.catalog.product.manufacturer.Manufacturer;
import com.salesmanager.core.model.catalog.product.manufacturer.ManufacturerDescription;
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.reference.language.Language;
@Service("manufacturerService")
public class ManufacturerServiceImpl extends
SalesManagerEntityServiceImpl<Long, Manufacturer> implements ManufacturerService {
private static final Logger LOGGER = LoggerFactory.getLogger(ManufacturerServiceImpl.class);
private ManufacturerRepository manufacturerRepository;
@Inject
public ManufacturerServiceImpl(
ManufacturerRepository manufacturerRepository) {
super(manufacturerRepository);
this.manufacturerRepository = manufacturerRepository;
}
@Override
public void delete(Manufacturer manufacturer) throws ServiceException{
manufacturer = this.getById(manufacturer.getId() );
super.delete( manufacturer );
}
@Override
public Long getCountManufAttachedProducts( Manufacturer manufacturer ) throws ServiceException {
return manufacturerRepository.countByProduct(manufacturer.getId());
//.getCountManufAttachedProducts( manufacturer );
}
@Override
public List<Manufacturer> listByStore(MerchantStore store, Language language) throws ServiceException {
return manufacturerRepository.findByStoreAndLanguage(store.getId(), language.getId());
}
@Override
public List<Manufacturer> listByStore(MerchantStore store) throws ServiceException {
return manufacturerRepository.findByStore(store.getId());
}
@Override
public List<Manufacturer> listByProductsByCategoriesId(MerchantStore store, List<Long> ids, Language language) throws ServiceException {
return manufacturerRepository.findByCategoriesAndLanguage(ids, language.getId());
}
@Override
public void addManufacturerDescription(Manufacturer manufacturer, ManufacturerDescription description)
throws ServiceException {
if(manufacturer.getDescriptions()==null) {
manufacturer.setDescriptions(new HashSet<ManufacturerDescription>());
}
manufacturer.getDescriptions().add(description);
description.setManufacturer(manufacturer);
update(manufacturer);
}
@Override
public void saveOrUpdate(Manufacturer manufacturer) throws ServiceException {
LOGGER.debug("Creating Manufacturer");
if(manufacturer.getId()!=null && manufacturer.getId()>0) {
super.update(manufacturer);
} else {
super.create(manufacturer);
}
}
@Override
public Manufacturer getByCode(com.salesmanager.core.model.merchant.MerchantStore store, String code) {
return manufacturerRepository.findByCodeAndMerchandStore(code, store.getId());
}
}