/// <summary> /// Permanent delete of customer /// </summary> /// <param name="customer">Customer</param> public virtual void PermanentDeleteCustomer(Customer customer) { if (customer == null) { throw new ArgumentNullException(nameof(customer)); } //blog comments var blogComments = _blogService.GetAllComments(customerId: customer.Id); _blogService.DeleteBlogComments(blogComments); //news comments var newsComments = _newsService.GetAllComments(customerId: customer.Id); _newsService.DeleteNewsComments(newsComments); //external authentication record foreach (var ear in customer.ExternalAuthenticationRecords) { _externalAuthenticationService.DeleteExternalAuthenticationRecord(ear); } //forum subscriptions var forumSubscriptions = _forumService.GetAllSubscriptions(customer.Id); foreach (var forumSubscription in forumSubscriptions) { _forumService.DeleteSubscription(forumSubscription); } //private messages (sent) foreach (var pm in _forumService.GetAllPrivateMessages(0, customer.Id, 0, null, null, null, null)) { _forumService.DeletePrivateMessage(pm); } //private messages (received) foreach (var pm in _forumService.GetAllPrivateMessages(0, 0, customer.Id, null, null, null, null)) { _forumService.DeletePrivateMessage(pm); } //newsletter var allStores = _storeService.GetAllStores(); foreach (var store in allStores) { var newsletter = _newsLetterSubscriptionService.GetNewsLetterSubscriptionByEmailAndStoreId(customer.Email, store.Id); if (newsletter != null) { _newsLetterSubscriptionService.DeleteNewsLetterSubscription(newsletter); } } //addresses foreach (var address in customer.Addresses) { _customerService.RemoveCustomerAddress(customer, address); _customerService.UpdateCustomer(customer); //now delete the address record _addressService.DeleteAddress(address); } //generic attributes var keyGroup = customer.GetUnproxiedEntityType().Name; var genericAttributes = _genericAttributeService.GetAttributesForEntity(customer.Id, keyGroup); _genericAttributeService.DeleteAttributes(genericAttributes); //ignore ActivityLog //ignore ForumPost, ForumTopic, ignore ForumPostVote //ignore Log //ignore PollVotingRecord //ignore ProductReviewHelpfulness //ignore RecurringPayment //ignore ReturnRequest //ignore RewardPointsHistory //and we do not delete orders //remove from Registered role, add to Guest one if (customer.IsRegistered()) { var registeredRole = _customerService.GetCustomerRoleBySystemName(GSCustomerDefaults.RegisteredRoleName); customer.CustomerCustomerRoleMappings .Remove(customer.CustomerCustomerRoleMappings.FirstOrDefault(mapping => mapping.CustomerRoleId == registeredRole.Id)); } if (!customer.IsGuest()) { var guestRole = _customerService.GetCustomerRoleBySystemName(GSCustomerDefaults.GuestsRoleName); customer.CustomerCustomerRoleMappings.Add(new CustomerCustomerRoleMapping { CustomerRole = guestRole }); } var email = customer.Email; //clear other information customer.Email = string.Empty; customer.EmailToRevalidate = string.Empty; customer.Username = string.Empty; customer.Active = false; customer.Deleted = true; _customerService.UpdateCustomer(customer); //raise event _eventPublisher.Publish(new CustomerPermanentlyDeleted(customer.Id, email)); }
/// <summary> /// Permanent delete of customer /// </summary> /// <param name="customer">Customer</param> public virtual void PermanentDeleteCustomer(Customer customer) { if (customer == null) { throw new ArgumentNullException(nameof(customer)); } //blog comments var blogComments = _blogService.GetAllComments(customerId: customer.Id); _blogService.DeleteBlogComments(blogComments); //news comments var newsComments = _newsService.GetAllComments(customerId: customer.Id); _newsService.DeleteNewsComments(newsComments); //back in stock subscriptions var backInStockSubscriptions = _backInStockSubscriptionService.GetAllSubscriptionsByCustomerId(customer.Id); foreach (var backInStockSubscription in backInStockSubscriptions) { _backInStockSubscriptionService.DeleteSubscription(backInStockSubscription); } //product review var productReviews = _productService.GetAllProductReviews(customerId: customer.Id, approved: null); var reviewedProducts = _productService.GetProductsByIds(productReviews.Select(p => p.ProductId).Distinct().ToArray()); _productService.DeleteProductReviews(productReviews); //update product totals foreach (var product in reviewedProducts) { _productService.UpdateProductReviewTotals(product); } //external authentication record foreach (var ear in customer.ExternalAuthenticationRecords) { _externalAuthenticationService.DeleteExternalAuthenticationRecord(ear); } //forum subscriptions var forumSubscriptions = _forumService.GetAllSubscriptions(customerId: customer.Id); foreach (var forumSubscription in forumSubscriptions) { _forumService.DeleteSubscription(forumSubscription); } //shopping cart items foreach (var sci in customer.ShoppingCartItems) { _shoppingCartService.DeleteShoppingCartItem(sci); } //private messages (sent) foreach (var pm in _forumService.GetAllPrivateMessages(storeId: 0, fromCustomerId: customer.Id, toCustomerId: 0, isRead: null, isDeletedByAuthor: null, isDeletedByRecipient: null, keywords: null)) { _forumService.DeletePrivateMessage(pm); } //private messages (received) foreach (var pm in _forumService.GetAllPrivateMessages(storeId: 0, fromCustomerId: 0, toCustomerId: customer.Id, isRead: null, isDeletedByAuthor: null, isDeletedByRecipient: null, keywords: null)) { _forumService.DeletePrivateMessage(pm); } //newsletter var allStores = _storeService.GetAllStores(); foreach (var store in allStores) { var newsletter = _newsLetterSubscriptionService.GetNewsLetterSubscriptionByEmailAndStoreId(customer.Email, store.Id); if (newsletter != null) { _newsLetterSubscriptionService.DeleteNewsLetterSubscription(newsletter); } } //addresses foreach (var address in customer.Addresses) { customer.RemoveAddress(address); _customerService.UpdateCustomer(customer); //now delete the address record _addressService.DeleteAddress(address); } //generic attributes var keyGroup = customer.GetUnproxiedEntityType().Name; var genericAttributes = _genericAttributeService.GetAttributesForEntity(customer.Id, keyGroup); _genericAttributeService.DeleteAttributes(genericAttributes); //ignore ActivityLog //ignore ForumPost, ForumTopic, ignore ForumPostVote //ignore Log //ignore PollVotingRecord //ignore ProductReviewHelpfulness //ignore RecurringPayment //ignore ReturnRequest //ignore RewardPointsHistory //and we do not delete orders //remove from Registered role, add to Guest one if (customer.IsRegistered()) { var registeredRole = _customerService.GetCustomerRoleBySystemName(NopCustomerDefaults.RegisteredRoleName); customer.CustomerCustomerRoleMappings .Remove(customer.CustomerCustomerRoleMappings.FirstOrDefault(mapping => mapping.CustomerRoleId == registeredRole.Id)); } if (!customer.IsGuest()) { var guestRole = _customerService.GetCustomerRoleBySystemName(NopCustomerDefaults.GuestsRoleName); customer.CustomerCustomerRoleMappings.Add(new CustomerCustomerRoleMapping { CustomerRole = guestRole }); } var email = customer.Email; //clear other information customer.Email = ""; customer.EmailToRevalidate = ""; customer.Username = ""; customer.Active = false; customer.Deleted = true; _customerService.UpdateCustomer(customer); //raise event _eventPublisher.Publish(new CustomerPermanentlyDeleted(customer.Id, email)); }