package com.salesmanager.core.business.services.catalog.product.review;
import java.math.BigDecimal;
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.review.ProductReviewRepository;
import com.salesmanager.core.business.services.catalog.product.ProductService;
import com.salesmanager.core.business.services.common.generic.SalesManagerEntityServiceImpl;
import com.salesmanager.core.model.catalog.product.Product;
import com.salesmanager.core.model.catalog.product.review.ProductReview;
import com.salesmanager.core.model.customer.Customer;
import com.salesmanager.core.model.reference.language.Language;
@Service("productReviewService")
public class ProductReviewServiceImpl extends
SalesManagerEntityServiceImpl<Long, ProductReview> implements
ProductReviewService {
private ProductReviewRepository productReviewRepository;
@Inject
private ProductService productService;
@Inject
public ProductReviewServiceImpl(
ProductReviewRepository productReviewRepository) {
super(productReviewRepository);
this.productReviewRepository = productReviewRepository;
}
@Override
public List<ProductReview> getByCustomer(Customer customer) {
return productReviewRepository.findByCustomer(customer.getId());
}
@Override
public List<ProductReview> getByProduct(Product product) {
return productReviewRepository.findByProduct(product.getId());
}
@Override
public ProductReview getByProductAndCustomer(Long productId, Long customerId) {
return productReviewRepository.findByProductAndCustomer(productId, customerId);
}
@Override
public List<ProductReview> getByProduct(Product product, Language language) {
return productReviewRepository.findByProduct(product.getId(), language.getId());
}
public void create(ProductReview review) throws ServiceException {
//adjust score
//refresh product
Product product = productService.getById(review.getProduct().getId());
//ajust product rating
Integer count = 0;
if(product.getProductReviewCount()!=null) {
count = product.getProductReviewCount();
}
BigDecimal averageRating = product.getProductReviewAvg();
if(averageRating==null) {
averageRating = new BigDecimal(0);
}
//get reviews
BigDecimal totalRating = averageRating.multiply(new BigDecimal(count));
totalRating = totalRating.add(new BigDecimal(review.getReviewRating()));
count = count + 1;
double avg = totalRating.doubleValue() / count.intValue();
product.setProductReviewAvg(new BigDecimal(avg));
product.setProductReviewCount(count);
super.create(review);
productService.update(product);
}
/* (non-Javadoc)
* @see com.salesmanager.core.business.services.catalog.product.review.ProductReviewService#getByProductNoObjects(com.salesmanager.core.model.catalog.product.Product)
*/
@Override
public List<ProductReview> getByProductNoCustomers(Product product) {
return productReviewRepository.findByProductNoCustomers(product.getId());
}
}