/// <summary> /// Delete shopping cart item /// </summary> /// <param name="shoppingCartItem">Shopping cart item</param> /// <param name="resetCheckoutData">A value indicating whether to reset checkout data</param> /// <param name="ensureOnlyActiveCheckoutAttributes">A value indicating whether to ensure that only active checkout attributes are attached to the current customer</param> public virtual void DeleteShoppingCartItem(ShoppingCartItem shoppingCartItem, bool resetCheckoutData = true, bool ensureOnlyActiveCheckoutAttributes = false) { if (shoppingCartItem == null) { throw new ArgumentNullException("shoppingCartItem"); } var customer = shoppingCartItem.Customer; //reset checkout data if (resetCheckoutData) { _customerService.ResetCheckoutData(shoppingCartItem.Customer); } //delete item _sciRepository.Delete(shoppingCartItem); //validate checkout attributes if (ensureOnlyActiveCheckoutAttributes && //only for shopping cart items (ignore wishlist) shoppingCartItem.ShoppingCartType == ShoppingCartType.ShoppingCart) { var cart = customer.ShoppingCartItems.Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); customer.CheckoutAttributes = _checkoutAttributeParser.EnsureOnlyActiveAttributes(customer.CheckoutAttributes, cart); _customerService.UpdateCustomer(customer); } //event notification _eventPublisher.EntityDeleted(shoppingCartItem); }
/// <summary> /// Delete shopping cart item /// </summary> /// <param name="shoppingCartItem">Shopping cart item</param> /// <param name="resetCheckoutData">A value indicating whether to reset checkout data</param> /// <param name="ensureOnlyActiveCheckoutAttributes">A value indicating whether to ensure that only active checkout attributes are attached to the current customer</param> public virtual async Task DeleteShoppingCartItem(Customer customer, ShoppingCartItem shoppingCartItem, bool resetCheckoutData = true, bool ensureOnlyActiveCheckoutAttributes = false) { if (shoppingCartItem == null) { throw new ArgumentNullException(nameof(shoppingCartItem)); } if ((shoppingCartItem.RentalStartDateUtc.HasValue && shoppingCartItem.RentalEndDateUtc.HasValue) || !string.IsNullOrEmpty(shoppingCartItem.ReservationId)) { var reserved = await _productReservationService.GetCustomerReservationsHelperBySciId(shoppingCartItem.Id); foreach (var res in reserved) { if (res.CustomerId == _workContext.CurrentCustomer.Id) { await _productReservationService.DeleteCustomerReservationsHelper(res); } } } var storeId = shoppingCartItem.StoreId; //reset checkout data if (resetCheckoutData) { await _customerService.ResetCheckoutData(customer, shoppingCartItem.StoreId); } //delete item customer.ShoppingCartItems.Remove(customer.ShoppingCartItems.Where(x => x.Id == shoppingCartItem.Id).FirstOrDefault()); await _customerService.DeleteShoppingCartItem(customer.Id, shoppingCartItem); //validate checkout attributes if (ensureOnlyActiveCheckoutAttributes && //only for shopping cart items (ignore wishlist) shoppingCartItem.ShoppingCartTypeId == ShoppingCartType.ShoppingCart) { var cart = customer.ShoppingCartItems .Where(x => x.ShoppingCartTypeId == ShoppingCartType.ShoppingCart) .LimitPerStore(_shoppingCartSettings.SharedCartBetweenStores, storeId) .ToList(); var checkoutAttributes = await customer.GetUserField <List <CustomAttribute> >(_userFieldService, SystemCustomerFieldNames.CheckoutAttributes, storeId); var newcheckoutAttributes = await _checkoutAttributeParser.EnsureOnlyActiveAttributes(checkoutAttributes, cart); await _userFieldService.SaveField(customer, SystemCustomerFieldNames.CheckoutAttributes, newcheckoutAttributes, storeId); } //event notification await _mediator.EntityDeleted(shoppingCartItem); }
/// <summary> /// Delete shopping cart item /// </summary> /// <param name="shoppingCartItem">Shopping cart item</param> /// <param name="resetCheckoutData">A value indicating whether to reset checkout data</param> /// <param name="ensureOnlyActiveCheckoutAttributes">A value indicating whether to ensure that only active checkout attributes are attached to the current customer</param> public virtual void DeleteShoppingCartItem(ShoppingCartItem shoppingCartItem, bool resetCheckoutData = true, bool ensureOnlyActiveCheckoutAttributes = false) { if (shoppingCartItem == null) { throw new ArgumentNullException("shoppingCartItem"); } var customer = shoppingCartItem.Customer; var storeId = shoppingCartItem.StoreId; //reset checkout data if (resetCheckoutData) { _customerService.ResetCheckoutData(shoppingCartItem.Customer, shoppingCartItem.StoreId); } //delete item _sciRepository.Delete(shoppingCartItem); //validate checkout attributes if (ensureOnlyActiveCheckoutAttributes && //only for shopping cart items (ignore wishlist) shoppingCartItem.ShoppingCartType == ShoppingCartType.ShoppingCart) { var cart = customer.ShoppingCartItems .Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart) .Where(x => x.StoreId == storeId) .ToList(); var checkoutAttributesXml = customer.GetAttribute <string>(SystemCustomerAttributeNames.CheckoutAttributes, _genericAttributeService); checkoutAttributesXml = _checkoutAttributeParser.EnsureOnlyActiveAttributes(checkoutAttributesXml, cart); _genericAttributeService.SaveAttribute(customer, SystemCustomerAttributeNames.CheckoutAttributes, checkoutAttributesXml); } //event notification _eventPublisher.EntityDeleted(shoppingCartItem); }