示例#1
0
        public static VendorReviewListModel ToListModel(this VendorReview Review, IPictureService _pictureService, Product Product, Vendor Vendor, Order Order)
        {
            var model = new VendorReviewListModel()
            {
                CreatedOnUTC        = Review.CreatedOnUTC,
                CustomerId          = Review.CustomerId,
                HelpfulnessNoTotal  = Review.HelpfulnessNoTotal,
                HelpfulnessYesTotal = Review.HelpfulnessYesTotal,
                Id                    = Review.Id,
                IsApproved            = Review.IsApproved,
                ProductId             = Review.ProductId,
                Rating                = Review.Rating,
                ReviewText            = Review.ReviewText,
                Title                 = Review.Title,
                VendorId              = Review.VendorId,
                OrderId               = Review.OrderId,
                CertifiedBuyerReview  = Review.CertifiedBuyerReview,
                DisplayCertifiedBadge = Review.DisplayCertifiedBadge,
            };

            if (Product != null)
            {
                model.ProductName     = Product.Name;
                model.ProductSeName   = Product.GetSeName();
                model.ProductImageUrl = _pictureService.GetPictureUrl(Product.ProductPictures.FirstOrDefault().Picture);
            }
            if (Vendor != null)
            {
                model.VendorName   = Vendor.Name;
                model.VendorSeName = Vendor.GetSeName();
            }
            return(model);
        }
        public virtual async Task PrepareVendorReviewModel(VendorReviewModel model,
            VendorReview vendorReview, bool excludeProperties, bool formatReviewText)
        {
            if (model == null)
                throw new ArgumentNullException("model");

            if (vendorReview == null)
                throw new ArgumentNullException("vendorReview");
            var vendor = await _vendorService.GetVendorById(vendorReview.VendorId);
            var customer = await _customerService.GetCustomerById(vendorReview.CustomerId);

            model.Id = vendorReview.Id;
            model.VendorId = vendorReview.VendorId;
            model.VendorName = vendor.Name;
            model.CustomerId = vendorReview.CustomerId;
            model.CustomerInfo = customer != null ? customer.IsRegistered() ? customer.Email : _localizationService.GetResource("Admin.Customers.Guest") : "";
            model.Rating = vendorReview.Rating;
            model.CreatedOn = _dateTimeHelper.ConvertToUserTime(vendorReview.CreatedOnUtc, DateTimeKind.Utc);
            if (!excludeProperties)
            {
                model.Title = vendorReview.Title;
                if (formatReviewText)
                    model.ReviewText = FormatText.ConvertText(vendorReview.ReviewText);
                else
                    model.ReviewText = vendorReview.ReviewText;
                model.IsApproved = vendorReview.IsApproved;
            }
        }
示例#3
0
        public async Task BuilderTest()
        {
            var builder = new LiquidObjectBuilder(_mediatorMock.Object);
            var vendor  = new Vendor()
            {
                Id = "VendorId", Name = "vendorName"
            };
            var product = new Product()
            {
                Id = "productId", Name = "ProductName"
            };
            var vendorReview = new VendorReview()
            {
                Id = "RevId"
            };

            _mediatorMock.Setup(c => c.Send <LiquidVendor>(It.IsAny <IRequest <LiquidVendor> >(), default)).ReturnsAsync(new LiquidVendor(vendor));

            var liquidObject = await builder
                               .AddVendorReviewTokens(vendor, vendorReview)
                               .AddVendorTokens(vendor, new Language())
                               .AddOutOfStockTokens(product, new OutOfStockSubscription(), new Store(), new Language())
                               .BuildAsync();


            Assert.IsTrue(liquidObject.Vendor != null);
            Assert.IsTrue((liquidObject.Vendor as LiquidVendor).Name.Equals(vendor.Name));
            Assert.IsNotNull(liquidObject.VendorReview as LiquidVendorReview);
            Assert.IsTrue((liquidObject.VendorReview as LiquidVendorReview).VendorName.Equals(vendor.Name));
            Assert.IsTrue((liquidObject.OutOfStockSubscription as LiquidOutOfStockSubscription).ProductName.Equals(product.Name));
            _mediatorMock.Verify(c => c.Publish(It.IsAny <INotification>(), default), Times.Exactly(3));
        }
        public LiquidVendorReview(Vendor vendor, VendorReview vendorReview)
        {
            this._vendorReview = vendorReview;
            this._vendor       = vendor;

            AdditionalTokens = new Dictionary <string, string>();
        }
 public virtual async Task DeleteVendorReview(VendorReview vendorReview)
 {
     await _vendorService.DeleteVendorReview(vendorReview);
     var vendor = await _vendorService.GetVendorById(vendorReview.VendorId);
     //update vendor totals
     await _vendorService.UpdateVendorReviewTotals(vendor);
 }
示例#6
0
        public void AddVendorReviewTokens(LiquidObject liquidObject, VendorReview vendorReview)
        {
            var liquidVendorReview = new LiquidVendorReview(vendorReview);

            liquidObject.VendorReview = liquidVendorReview;

            _eventPublisher.EntityTokensAdded(vendorReview, liquidVendorReview, liquidObject);
        }
示例#7
0
        public virtual void DeleteVendorReview(VendorReview vendorReview)
        {
            _vendorService.DeleteVendorReview(vendorReview);

            var vendor = _vendorService.GetVendorById(vendorReview.VendorId);

            //update vendor totals
            _vendorService.UpdateVendorReviewTotals(vendor);
        }
示例#8
0
 public LiquidObjectBuilder AddVendorReviewTokens(Vendor vendor, VendorReview vendorReview)
 {
     _chain.Add(async liquidObject =>
     {
         var liquidVendorReview    = new LiquidVendorReview(vendor, vendorReview);
         liquidObject.VendorReview = liquidVendorReview;
         await _mediator.EntityTokensAdded(vendorReview, liquidVendorReview, liquidObject);
     });
     return(this);
 }
 public void SaveVendorReview(VendorReview VendorReview)
 {
     if (VendorReview.Id == 0)
     {
         _vendorReviewRepository.Insert(VendorReview);
     }
     else
     {
         _vendorReviewRepository.Update(VendorReview);
     }
 }
示例#10
0
        /// <summary>
        /// Deletes a vendor review
        /// </summary>
        /// <param name="vendorReview">Vendor review</param>
        public virtual void DeleteVendorReview(VendorReview vendorReview)
        {
            if (vendorReview == null)
            {
                throw new ArgumentNullException("vendorReview");
            }

            _vendorReviewRepository.Delete(vendorReview);

            //event notification
            _eventPublisher.EntityDeleted(vendorReview);
        }
示例#11
0
        /// <summary>
        /// Inserts a vendor review
        /// </summary>
        /// <param name="vendorPicture">Vendor picture</param>
        public virtual void InsertVendorReview(VendorReview vendorReview)
        {
            if (vendorReview == null)
            {
                throw new ArgumentNullException("vendorPicture");
            }

            _vendorReviewRepository.Insert(vendorReview);

            //event notification
            _eventPublisher.EntityInserted(vendorReview);
        }
示例#12
0
        /// <summary>
        /// Inserts a vendor review
        /// </summary>
        /// <param name="vendorPicture">Vendor picture</param>
        public virtual async Task InsertVendorReview(VendorReview vendorReview)
        {
            if (vendorReview == null)
            {
                throw new ArgumentNullException("vendorPicture");
            }

            await _vendorReviewRepository.InsertAsync(vendorReview);

            //event notification
            await _mediator.EntityInserted(vendorReview);
        }
示例#13
0
        /// <summary>
        /// Deletes a vendor review
        /// </summary>
        /// <param name="vendorReview">Vendor review</param>
        public virtual async Task DeleteVendorReview(VendorReview vendorReview)
        {
            if (vendorReview == null)
            {
                throw new ArgumentNullException("vendorReview");
            }

            await _vendorReviewRepository.DeleteAsync(vendorReview);

            //event notification
            await _mediator.EntityDeleted(vendorReview);
        }
        public virtual async Task<VendorReview> UpdateVendorReviewModel(VendorReview vendorReview, VendorReviewModel model)
        {
            vendorReview.Title = model.Title;
            vendorReview.ReviewText = model.ReviewText;
            vendorReview.IsApproved = model.IsApproved;

            await _vendorService.UpdateVendorReview(vendorReview);

            var vendor = await _vendorService.GetVendorById(vendorReview.VendorId);
            //update vendor totals
            await _vendorService.UpdateVendorReviewTotals(vendor);
            return vendorReview;
        }
示例#15
0
        public virtual VendorReview UpdateVendorReviewModel(VendorReview vendorReview, VendorReviewModel model)
        {
            vendorReview.Title      = model.Title;
            vendorReview.ReviewText = model.ReviewText;
            vendorReview.IsApproved = model.IsApproved;

            _vendorService.UpdateVendorReview(vendorReview);

            var vendor = _vendorService.GetVendorById(vendorReview.VendorId);

            //update vendor totals
            _vendorService.UpdateVendorReviewTotals(vendor);
            return(vendorReview);
        }
示例#16
0
        public virtual void UpdateVendorReview(VendorReview vendorreview)
        {
            if (vendorreview == null)
            {
                throw new ArgumentNullException("vendorreview");
            }

            var builder = Builders <VendorReview> .Filter;
            var filter  = builder.Eq(x => x.Id, vendorreview.Id);
            var update  = Builders <VendorReview> .Update
                          .Set(x => x.Title, vendorreview.Title)
                          .Set(x => x.ReviewText, vendorreview.ReviewText)
                          .Set(x => x.IsApproved, vendorreview.IsApproved);

            var result = _vendorReviewRepository.Collection.UpdateManyAsync(filter, update).Result;

            //event notification
            _eventPublisher.EntityUpdated(vendorreview);
        }
示例#17
0
        public virtual async Task UpdateVendorReview(VendorReview vendorreview)
        {
            if (vendorreview == null)
            {
                throw new ArgumentNullException(nameof(vendorreview));
            }

            var update = UpdateBuilder <VendorReview> .Create()
                         .Set(x => x.Title, vendorreview.Title)
                         .Set(x => x.ReviewText, vendorreview.ReviewText)
                         .Set(x => x.IsApproved, vendorreview.IsApproved)
                         .Set(x => x.HelpfulYesTotal, vendorreview.HelpfulYesTotal)
                         .Set(x => x.HelpfulNoTotal, vendorreview.HelpfulNoTotal);

            await _vendorReviewRepository.UpdateOneAsync(x => x.Id == vendorreview.Id, update);

            //event notification
            await _mediator.EntityUpdated(vendorreview);
        }
示例#18
0
        public virtual VendorReview InsertVendorReview(Vendor vendor, VendorReviewsModel model)
        {
            //save review
            int rating = model.AddVendorReview.Rating;

            if (rating < 1 || rating > 5)
            {
                rating = _vendorSettings.DefaultVendorRatingValue;
            }
            bool isApproved = !_vendorSettings.VendorReviewsMustBeApproved;

            var vendorReview = new VendorReview
            {
                VendorId        = vendor.Id,
                CustomerId      = _workContext.CurrentCustomer.Id,
                Title           = model.AddVendorReview.Title,
                ReviewText      = model.AddVendorReview.ReviewText,
                Rating          = rating,
                HelpfulYesTotal = 0,
                HelpfulNoTotal  = 0,
                IsApproved      = isApproved,
                CreatedOnUtc    = DateTime.UtcNow,
            };

            _vendorService.InsertVendorReview(vendorReview);

            if (!_workContext.CurrentCustomer.IsHasVendorReview)
            {
                _workContext.CurrentCustomer.IsHasVendorReview = true;
                EngineContext.Current.Resolve <ICustomerService>().UpdateHasVendorReview(_workContext.CurrentCustomer.Id);
            }

            //update vendor totals
            _vendorService.UpdateVendorReviewTotals(vendor);

            //notify store owner
            if (_vendorSettings.NotifyVendorAboutNewVendorReviews)
            {
                _workflowMessageService.SendVendorReviewNotificationMessage(vendorReview, _localizationSettings.DefaultAdminLanguageId);
            }

            return(vendorReview);
        }
示例#19
0
        public virtual async Task UpdateVendorReview(VendorReview vendorreview)
        {
            if (vendorreview == null)
            {
                throw new ArgumentNullException("vendorreview");
            }

            var builder = Builders <VendorReview> .Filter;
            var filter  = builder.Eq(x => x.Id, vendorreview.Id);
            var update  = Builders <VendorReview> .Update
                          .Set(x => x.Title, vendorreview.Title)
                          .Set(x => x.ReviewText, vendorreview.ReviewText)
                          .Set(x => x.IsApproved, vendorreview.IsApproved)
                          .Set(x => x.HelpfulYesTotal, vendorreview.HelpfulYesTotal)
                          .Set(x => x.HelpfulNoTotal, vendorreview.HelpfulNoTotal);

            await _vendorReviewRepository.Collection.UpdateManyAsync(filter, update);

            //event notification
            await _mediator.EntityUpdated(vendorreview);
        }
        public ActionResult SaveReview(VendorReviewModel model)
        {
            //only requested review
            var custId = _workContext.CurrentCustomer.Id;

            if (!_extendedVendorService.IsVendorReviewDone(model.VendorId, custId, model.OrderId, model.ProductId))
            {
                //check if customer can review this vendor for this order
                if (_extendedVendorService.CanCustomerReviewVendor(model.VendorId, custId, model.OrderId))
                {
                    //yes he can
                    var review = new VendorReview {
                        CreatedOnUTC        = DateTime.Now,
                        CustomerId          = custId,
                        HelpfulnessNoTotal  = 0,
                        HelpfulnessYesTotal = 0,
                        IsApproved          = false,
                        OrderId             = model.OrderId,
                        ProductId           = model.ProductId,
                        Rating     = model.Rating,
                        ReviewText = model.ReviewText,
                        Title      = model.Title,
                        VendorId   = model.VendorId
                    };

                    _extendedVendorService.SaveVendorReview(review);
                }
            }
            else
            {
                return(Json(new {
                    success = false,
                    error = "You have already reviewed this order"
                }));
            }
            return(Json(new {
                success = false,
                error = "You need to login to review a vendor"
            }));
        }
        public virtual async Task PrepareVendorReviewModel(VendorReviewModel model,
                                                           VendorReview vendorReview, bool excludeProperties, bool formatReviewText)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            if (vendorReview == null)
            {
                throw new ArgumentNullException(nameof(vendorReview));
            }

            var vendor = await _vendorService.GetVendorById(vendorReview.VendorId);

            var customer = await _customerService.GetCustomerById(vendorReview.CustomerId);

            model.Id           = vendorReview.Id;
            model.VendorId     = vendorReview.VendorId;
            model.VendorName   = vendor.Name;
            model.CustomerId   = vendorReview.CustomerId;
            model.CustomerInfo = customer != null ? !string.IsNullOrEmpty(customer.Email) ? customer.Email : _translationService.GetResource("Admin.Customers.Guest") : "";
            model.Rating       = vendorReview.Rating;
            model.CreatedOn    = _dateTimeService.ConvertToUserTime(vendorReview.CreatedOnUtc, DateTimeKind.Utc);
            if (!excludeProperties)
            {
                model.Title = vendorReview.Title;
                if (formatReviewText)
                {
                    model.ReviewText = FormatText.ConvertText(vendorReview.ReviewText);
                }
                else
                {
                    model.ReviewText = vendorReview.ReviewText;
                }
                model.IsApproved = vendorReview.IsApproved;
            }
        }
示例#22
0
        public static VendorReviewModel ToModel(this VendorReview Review, Order Order, Product Product)
        {
            var model = new VendorReviewModel()
            {
                CreatedOnUTC        = Review.CreatedOnUTC,
                CustomerId          = Review.CustomerId,
                HelpfulnessNoTotal  = Review.HelpfulnessNoTotal,
                HelpfulnessYesTotal = Review.HelpfulnessYesTotal,
                Id                    = Review.Id,
                IsApproved            = Review.IsApproved,
                ProductId             = Review.ProductId,
                Rating                = Review.Rating,
                ReviewText            = Review.ReviewText,
                Title                 = Review.Title,
                VendorId              = Review.VendorId,
                OrderId               = Review.OrderId,
                ProductName           = Product.Name,
                CertifiedBuyerReview  = Review.CertifiedBuyerReview,
                DisplayCertifiedBadge = Review.DisplayCertifiedBadge
            };

            return(model);
        }
示例#23
0
        protected virtual void PrepareVendorReviewModel(VendorReviewModel model,
                                                        VendorReview vendorReview, bool excludeProperties, bool formatReviewText)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            if (vendorReview == null)
            {
                throw new ArgumentNullException("vendorReview");
            }
            var vendor   = _vendorService.GetVendorById(vendorReview.VendorId);
            var customer = _customerService.GetCustomerById(vendorReview.CustomerId);

            model.Id           = vendorReview.Id;
            model.VendorId     = vendorReview.VendorId;
            model.VendorName   = vendor.Name;
            model.CustomerId   = vendorReview.CustomerId;
            model.CustomerInfo = customer != null?customer.IsRegistered() ? customer.Email : _localizationService.GetResource("Admin.Customers.Guest") : "";

            model.Rating    = vendorReview.Rating;
            model.CreatedOn = _dateTimeHelper.ConvertToUserTime(vendorReview.CreatedOnUtc, DateTimeKind.Utc);
            if (!excludeProperties)
            {
                model.Title = vendorReview.Title;
                if (formatReviewText)
                {
                    model.ReviewText = Core.Html.HtmlHelper.FormatText(vendorReview.ReviewText, false, true, false, false, false, false);
                }
                else
                {
                    model.ReviewText = vendorReview.ReviewText;
                }
                model.IsApproved = vendorReview.IsApproved;
            }
        }
        public async Task AddVendorReviewTokens(LiquidObject liquidObject, Vendor vendor, VendorReview vendorReview)
        {
            var liquidVendorReview = new LiquidVendorReview(vendor, vendorReview);

            liquidObject.VendorReview = liquidVendorReview;
            await _mediator.EntityTokensAdded(vendorReview, liquidVendorReview, liquidObject);
        }
        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"));
            }
        }
示例#26
0
 public VendorReviewApprovedEvent(VendorReview vendorReview)
 {
     VendorReview = vendorReview;
 }
 public void DeleteVendorReview(VendorReview VendorReview)
 {
     _vendorReviewRepository.Delete(VendorReview);
 }