package com.salesmanager.core.business.services.catalog.product.relationship;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import com.salesmanager.core.business.exception.ServiceException;
import com.salesmanager.core.business.repositories.catalog.product.relationship.ProductRelationshipRepository;
import com.salesmanager.core.business.services.common.generic.SalesManagerEntityServiceImpl;
import com.salesmanager.core.model.catalog.product.Product;
import com.salesmanager.core.model.catalog.product.relationship.ProductRelationship;
import com.salesmanager.core.model.catalog.product.relationship.ProductRelationshipType;
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.reference.language.Language;
@Service("productRelationshipService")
public class ProductRelationshipServiceImpl extends
SalesManagerEntityServiceImpl<Long, ProductRelationship> implements
ProductRelationshipService {
private ProductRelationshipRepository productRelationshipRepository;
@Inject
public ProductRelationshipServiceImpl(
ProductRelationshipRepository productRelationshipRepository) {
super(productRelationshipRepository);
this.productRelationshipRepository = productRelationshipRepository;
}
@Override
public void saveOrUpdate(ProductRelationship relationship) throws ServiceException {
if(relationship.getId()!=null && relationship.getId()>0) {
this.update(relationship);
} else {
this.create(relationship);
}
}
@Override
public void addGroup(MerchantStore store, String groupName) throws ServiceException {
ProductRelationship relationship = new ProductRelationship();
relationship.setCode(groupName);
relationship.setStore(store);
relationship.setActive(true);
this.save(relationship);
}
@Override
public List<ProductRelationship> getGroups(MerchantStore store) {
return productRelationshipRepository.getGroups(store);
}
@Override
public void deleteGroup(MerchantStore store, String groupName) throws ServiceException {
List<ProductRelationship> entities = productRelationshipRepository.getByGroup(store, groupName);
for(ProductRelationship relation : entities) {
this.delete(relation);
}
}
@Override
public void deactivateGroup(MerchantStore store, String groupName) throws ServiceException {
List<ProductRelationship> entities = productRelationshipRepository.getByGroup(store, groupName);
for(ProductRelationship relation : entities) {
relation.setActive(false);
this.saveOrUpdate(relation);
}
}
@Override
public void activateGroup(MerchantStore store, String groupName) throws ServiceException {
List<ProductRelationship> entities = this.getByGroup(store, groupName);
for(ProductRelationship relation : entities) {
relation.setActive(true);
this.saveOrUpdate(relation);
}
}
public void delete(ProductRelationship relationship) throws ServiceException {
//throws detached exception so need to query first
relationship = this.getById(relationship.getId());
super.delete(relationship);
}
@Override
public List<ProductRelationship> listByProduct(Product product) throws ServiceException {
return productRelationshipRepository.listByProducts(product);
}
@Override
public List<ProductRelationship> getByType(MerchantStore store, Product product, ProductRelationshipType type, Language language) throws ServiceException {
return productRelationshipRepository.getByType(store, type.name(), product, language);
}
@Override
public List<ProductRelationship> getByType(MerchantStore store, ProductRelationshipType type, Language language) throws ServiceException {
return productRelationshipRepository.getByType(store, type.name(), language);
}
@Override
public List<ProductRelationship> getByType(MerchantStore store, ProductRelationshipType type) throws ServiceException {
return productRelationshipRepository.getByType(store, type.name());
}
@Override
public List<ProductRelationship> getByGroup(MerchantStore store, String groupName) throws ServiceException {
return productRelationshipRepository.getByType(store, groupName);
}
@Override
public List<ProductRelationship> getByGroup(MerchantStore store, String groupName, Language language) throws ServiceException {
return productRelationshipRepository.getByType(store, groupName, language);
}
@Override
public List<ProductRelationship> getByType(MerchantStore store, Product product, ProductRelationshipType type) throws ServiceException {
return productRelationshipRepository.getByType(store, type.name(), product);
}
}