public ProductQueryModel GetProductDetails(string slug) { var inventory = _inventoryContext.Inventories .Select(x => new { x.ProductId, x.UnitPrice, x.InStock }); var dateTime = DateTime.Now; var discounts = _discountContext.CustomerDiscounts .Where(x => x.StartDate < dateTime && dateTime < x.EndDate) .Select(x => new { x.ProductId, x.DiscountRate, x.EndDate }); var products = _shopContext.Products .Include(x => x.Category) .Include(x => x.ProductPictures) .Select(product => new ProductQueryModel { Id = product.Id, Category = product.Category.Name, PrimaryPicture = product.PrimaryPicture, SecondaryPicture = product.SecondaryPicture, PictureAlt = product.PictureAlt, PictureTitle = product.PictureTitle, Slug = product.Slug, Name = product.Name, Seller = product.Seller, CategorySlug = product.Category.Slug, Code = product.Code, View = product.View, Description = product.Description, Keywords = product.Keywords, MetaDescription = product.MetaDescription, ShortDescription = product.ShortDescription, Pictures = MapProductPictures(product.ProductPictures), }).FirstOrDefault(x => x.Slug == slug); if (products == null) { return(new ProductQueryModel()); } var productInventory = inventory.FirstOrDefault(x => x.ProductId == products.Id); if (productInventory != null) { products.InStock = productInventory.InStock; var price = productInventory.UnitPrice; products.Price = price.ToMoney(); products.DoublePrice = price; var discount = discounts.FirstOrDefault(x => x.ProductId == products.Id); if (discount != null) { var discountRate = discount.DiscountRate; products.DiscountRate = discountRate; products.DiscountExpireDate = discount.EndDate.ToDiscountFormat(); products.HasDiscount = discountRate > 0; var discountAmount = Math.Round((price * discountRate) / 100); products.PriceWithDiscount = (price - discountAmount).ToMoney(); } } products.Comments = _commentContext.Comments .Where(x => x.Type == CommentTypes.Product) .Where(x => x.OwnerRecordId == products.Id) .Where(x => !x.IsCanceled) .Where(x => x.IsConfirmed) .Select(x => new CommentQueryModel { Id = x.Id, Name = x.Name, Message = x.Message, OwnerRecordId = x.OwnerRecordId, CreationDate = x.CreationDate.ToFarsi(), }).OrderByDescending(x => x.Id).ToList(); var productView = new EditProductView { Id = products.Id, View = products.View + 1 }; _productApplication.EditProductView(productView); return(products); }