public ActionResult EditExtendedReview(int OrderId, int ProductId)
        {
            var product  = _productService.GetProductById(ProductId);
            var customer = _workContext.CurrentCustomer;
            var customerProductReviews = product.ProductReviews.Where(m => m.CustomerId == customer.Id).OrderByDescending(m => m.CreatedOnUtc);
            var model = new PublicReviewEditModel();

            if (!customerProductReviews.Any())
            {
                model.AddProductReviewModel = new AddProductReviewModel();
            }
            else
            {
                var pr = customerProductReviews.First();
                model.AddProductReviewModel = new AddProductReviewModel()
                {
                    Title      = pr.Title,
                    ReviewText = pr.ReviewText,
                    Rating     = pr.Rating,
                };
            }

            var customerVendorReview = _extendedVendorService.GetVendorReview(product.VendorId, customer.Id, OrderId, product.Id);
            var vendor = _vendorService.GetVendorById(product.VendorId);

            if (customerVendorReview == null)
            {
                model.VendorReviewListModel = new VendorReviewListModel();
            }
            else
            {
                var order = _orderService.GetOrderById(OrderId);
                model.VendorReviewListModel = customerVendorReview.ToListModel(_pictureService, product, vendor, order);
            }

            model.VendorReviewListModel.CustomerName = customer.FormatUserName();

            var extendedVendor = _extendedVendorService.GetExtendedVendor(product.VendorId);

            model.VendorName    = vendor.Name;
            model.ProductName   = product.Name;
            model.ProductSeName = product.GetSeName();
            model.VendorSeName  = vendor.GetSeName();

            if (product.ProductPictures.Count > 0)
            {
                model.ProductImageUrl = _pictureService.GetPictureUrl(product.ProductPictures.First().Picture);
            }

            if (extendedVendor != null && extendedVendor.LogoId > 0)
            {
                model.VendorImageUrl = _pictureService.GetPictureUrl(extendedVendor.LogoId);
            }

            model.VendorReviewListModel.ProductId = product.Id;
            model.VendorReviewListModel.OrderId   = OrderId;
            return(View("ExtendedVendor/EditExtendedReview", model));
        }
        public ActionResult EditExtendedReviewPost(int OrderId, int ProductId, PublicReviewEditModel model)
        {
            var ProductReview = model.AddProductReviewModel;
            var VendorReview  = model.VendorReviewListModel;
            var customer      = _workContext.CurrentCustomer;
            var product       = _productService.GetProductById(ProductId);

            if (product == null || product.Deleted || !product.Published || !product.AllowCustomerReviews)
            {
                return(RedirectToRoute("HomePage"));
            }
            if (ModelState.IsValid)
            {
                var canCustomerReviewVendor = _extendedVendorService.CanCustomerReviewVendor(product.VendorId, customer.Id, OrderId);
                if (!canCustomerReviewVendor)
                {
                    return(InvokeHttp404());
                }

                var customerProductReviews = product.ProductReviews.Where(m => m.CustomerId == customer.Id).OrderByDescending(m => m.CreatedOnUtc);
                var rating = ProductReview.Rating;
                if (rating < 1 || rating > 5)
                {
                    rating = _catalogSettings.DefaultProductRatingValue;
                }
                var           isApproved = !_catalogSettings.ProductReviewsMustBeApproved;
                ProductReview productReview;
                if (customerProductReviews.Any())
                {
                    productReview            = customerProductReviews.First();
                    productReview.Title      = ProductReview.Title;
                    productReview.ReviewText = ProductReview.ReviewText;
                    productReview.Rating     = rating;
                    productReview.IsApproved = isApproved;
                    //updating
                }
                else
                {
                    productReview = new ProductReview()
                    {
                        ProductId       = product.Id,
                        CustomerId      = _workContext.CurrentCustomer.Id,
                        Title           = ProductReview.Title,
                        ReviewText      = ProductReview.ReviewText,
                        Rating          = rating,
                        HelpfulYesTotal = 0,
                        HelpfulNoTotal  = 0,
                        IsApproved      = isApproved,
                        CreatedOnUtc    = DateTime.UtcNow,
                    };
                    product.ProductReviews.Add(productReview);
                }
                _productService.UpdateProduct(product);

                //update product totals
                _productService.UpdateProductReviewTotals(product);

                //notify store owner
                if (_catalogSettings.NotifyStoreOwnerAboutNewProductReviews)
                {
                    _workflowMessageService.SendProductReviewNotificationMessage(productReview, _localizationSettings.DefaultAdminLanguageId);
                }

                //activity log
                _customerActivityService.InsertActivity("PublicStore.AddProductReview", _localizationService.GetResource("ActivityLog.PublicStore.AddProductReview"), product.Name);


                rating = VendorReview.Rating;
                if (rating < 1 || rating > 5)
                {
                    rating = _catalogSettings.DefaultProductRatingValue;
                }


                var vendorReview = _extendedVendorService.GetVendorReview(product.VendorId, customer.Id, OrderId, ProductId);
                if (vendorReview == null)
                {
                    vendorReview = new VendorReview()
                    {
                        IsApproved            = isApproved,
                        CertifiedBuyerReview  = true,
                        DisplayCertifiedBadge = true,
                        CreatedOnUTC          = DateTime.Now,
                        CustomerId            = customer.Id,
                        HelpfulnessNoTotal    = 0,
                        HelpfulnessYesTotal   = 0,
                        OrderId    = OrderId,
                        ProductId  = product.Id,
                        Rating     = rating,
                        ReviewText = VendorReview.ReviewText,
                        Title      = VendorReview.Title,
                        VendorId   = product.VendorId
                    };
                }
                else
                {
                    vendorReview.IsApproved          = isApproved;
                    vendorReview.ReviewText          = VendorReview.ReviewText;
                    vendorReview.Title               = VendorReview.Title;
                    vendorReview.Rating              = rating;
                    vendorReview.HelpfulnessYesTotal = 0;
                    vendorReview.HelpfulnessNoTotal  = 0;
                }
                _extendedVendorService.SaveVendorReview(vendorReview);
                return(RedirectToRoute("ExtendedVendorReviewCenterLoader", new { Redirection = true }));
            }
            else
            {
                return(RedirectToRoute("HomePage"));
            }
        }