تخفیف در بخش کالاهای مشابه نمایش داده نمیشود. زیرا در ایندکس لوسین لیست تخفیفها وارد نشده است. لیست تخفیفها به ویو ارسال میشود و در آنجا بررسی میشود که تخفیف فعال وجود دارد یا خیر!
سرویس:
راه حل بنده
کنترلر:
// در این قسمت discounts // در کالاهای مشابه اضافه نشده است var serchResult = LuceneIndex.GetMoreLikeThisProjectItems(id) .Where(item => item.Category == "کالاها").Skip(1).Take(8).ToList(); List<ProductWidgetViewModel> productToDel = new List<ProductWidgetViewModel>(); if (serchResult.Count > 0) { foreach (var product in serchResult) { if (product.Discount > 0) { var resul = await _productService.GetProductDiscount(product.Id); // محصول در دیتابیس وجود نداشته if (resul == null) { productToDel.Add(product); //error //serchResult.Remove(product); } else if (resul.Discount != 0) { product.Discounts = new List<ProductPageDiscountWidgetViewModel>(); product.Discounts.Add(resul); } } } } foreach (var product in productToDel) { serchResult.Remove(product); } ViewData["SimilarProducts"] = serchResult;
سرویس:
public async Task<ProductPageDiscountWidgetViewModel> GetProductDiscount(int productId) { var product = await _products.FirstOrDefaultAsync(p => p.Id == productId); //by SYA // در ایندکس هست اما در دیتابیس نیست product == null if (product == null) { return null; } else if (product.Discounts == null) { return new ProductPageDiscountWidgetViewModel { Discount = 0 }; } //_mappingEngine.Map<ProductDiscount, ProductPageDiscountWidgetViewModel>( // product.Discounts.OrderByDescending(p => p.EndDate).FirstOrDefault()); foreach (var dic in product.Discounts.OrderByDescending(p => p.StartDate).ToList()) { if (dic.Discount > 0 && dic.EndDate >= DateTimeExtentionService.NowIranZone()) { return _mappingEngine.Map<ProductDiscount, ProductPageDiscountWidgetViewModel>(dic); } } return new ProductPageDiscountWidgetViewModel { Discount = 0 }; }
در موقع نوشتن کد حالتی را در نظر گرفتم که کالا در ایندکس لوسین وجود داشته باشد اما در دیتابیس نه!