public static ConfiguredGroup ToConfiguredGroup(this orderDto.DemoOrderConfiguredGroup group, CustomerOrder order) { var result = new ConfiguredGroup(group.Quantity ?? 0, order.Currency, group.ProductId) { Id = group.Id, Name = group.Name, ImageUrl = group.ImageUrl, CreatedBy = group.CreatedBy, CreatedDate = group.CreatedDate ?? DateTime.UtcNow, ModifiedBy = group.ModifiedBy, ModifiedDate = group.ModifiedDate, ExtendedPrice = new Money(group.ExtendedPrice ?? 0, order.Currency), ExtendedPriceWithTax = new Money(group.ExtendedPriceWithTax ?? 0, order.Currency), TaxTotal = new Money(group.TaxTotal ?? 0, order.Currency), Price = new Money(group.Price ?? 0, order.Currency), PriceWithTax = new Money(group.PriceWithTax ?? 0, order.Currency), PlacedPrice = new Money(group.PlacedPrice ?? 0, order.Currency), PlacedPriceWithTax = new Money(group.PlacedPriceWithTax ?? 0, order.Currency), Currency = order.Currency, }; foreach (var item in group.ItemIds.Select(id => order.Items.First(x => x.Id == id))) { result.Items.Add(item); } return(result); }
public static ConfiguredGroup ToConfiguredGroup(this cartApiDto.DemoCartConfiguredGroup group, ShoppingCart cart) { var result = new ConfiguredGroup(group.Quantity ?? 0, cart.Currency, group.ProductId) { Id = group.Id, CreatedBy = group.CreatedBy, CreatedDate = group.CreatedDate ?? DateTime.UtcNow, ModifiedBy = group.ModifiedBy, ModifiedDate = group.ModifiedDate, ExtendedPrice = new Money(group.ExtendedPrice ?? 0, cart.Currency), ExtendedPriceWithTax = new Money(group.ExtendedPriceWithTax ?? 0, cart.Currency), TaxTotal = new Money(group.TaxTotal ?? 0, cart.Currency), ListPrice = new Money(group.ListPrice ?? 0, cart.Currency), ListPriceWithTax = new Money(group.ListPriceWithTax ?? 0, cart.Currency), SalePrice = new Money(group.SalePrice ?? 0, cart.Currency), SalePriceWithTax = new Money(group.SalePriceWithTax ?? 0, cart.Currency), PlacedPrice = new Money(group.PlacedPrice ?? 0, cart.Currency), PlacedPriceWithTax = new Money(group.PlacedPriceWithTax ?? 0, cart.Currency), Currency = cart.Currency, }; foreach (var item in group.ItemIds.Select(id => cart.Items.First(x => x.Id == id))) { result.Items.Add(item); } return(result); }
public static orderDto.DemoOrderConfiguredGroup ToConfiguredGroup(this ConfiguredGroup group) { foreach (var lineItem in group.Items) { lineItem.Id = lineItem.Id ?? Guid.NewGuid().ToString("N"); } return(new orderDto.DemoOrderConfiguredGroup { Id = group.Id ?? Guid.NewGuid().ToString("N"), ProductId = group.ProductId, Name = group.Name, ImageUrl = group.ImageUrl, ItemIds = group.Items.Select(x => x.Id).ToList(), CreatedBy = group.CreatedBy, CreatedDate = group.CreatedDate, ModifiedBy = group.ModifiedBy, ModifiedDate = group.ModifiedDate, Currency = group.Currency.Code, ExtendedPrice = (double)group.ExtendedPrice.InternalAmount, ExtendedPriceWithTax = (double)group.ExtendedPriceWithTax.InternalAmount, Price = (double)group.Price.InternalAmount, PriceWithTax = (double)group.PriceWithTax.InternalAmount, PlacedPrice = (double)group.PlacedPrice.InternalAmount, PlacedPriceWithTax = (double)group.PlacedPriceWithTax.InternalAmount, TaxTotal = (double)group.TaxTotal.InternalAmount, Quantity = group.Quantity }); }
public async Task <ActionResult <AddItemsToCartResult> > AddItemsToCart([FromBody] AddCartItem[] items) { if (items.IsNullOrEmpty()) { throw new ArgumentNullException(nameof(items)); } EnsureCartExists(); //Need lock to prevent concurrent access to same cart using (await AsyncLock.GetLockByKey(WorkContext.CurrentCart.Value.GetCacheKey()).LockAsync()) { var productIds = items.Select(x => x.Id).ToArray(); var products = await _catalogService.GetProductsAsync(productIds, Model.Catalog.ItemResponseGroup.ItemSmall | Model.Catalog.ItemResponseGroup.ItemWithPrices | Model.Catalog.ItemResponseGroup.Inventory); var cartBuilder = await LoadOrCreateCartAsync(); var cart = _cartBuilder.Cart; var currency = WorkContext.CurrentCurrency; var firstItem = items.First(); var configuredProductId = firstItem.ConfiguredProductId; ConfiguredGroup configuredGroup = null; // case with the configured product adding if (configuredProductId != null) { configuredGroup = cart.ConfiguredGroups?.FirstOrDefault(x => (x.ProductId == configuredProductId) && x.Items.OrderBy(x => x.ProductId).Select(x => x.ProductId).SequenceEqual(items.OrderBy(i => i.ProductId).Select(i => i.ProductId).ToArray()) ); if (configuredGroup == null) { var configuredProduct = (await _catalogService.GetProductsAsync(new string[] { configuredProductId }, Model.Catalog.ItemResponseGroup.ItemSmall)).FirstOrDefault(); configuredGroup = new Model.Cart.Demo.ConfiguredGroup(firstItem.Quantity, currency, configuredProductId) { Name = configuredProduct?.Name ?? string.Empty, ImageUrl = configuredProduct?.PrimaryImage?.Url }; cart.ConfiguredGroups.Add(configuredGroup); } else { configuredGroup.Quantity += Math.Max(1, firstItem.Quantity); } } foreach (var item in items) { item.ConfiguredGroupId = configuredGroup?.Id; item.Product = products.First(x => x.Id == item.ProductId); await cartBuilder.AddItemAsync(item); } var validationResult = await new CartDemoValidator().ValidateAsync(cart, ruleSet: "default,strict"); if (validationResult.IsValid) { await cartBuilder.SaveAsync(); } var result = new AddItemsToCartResult { IsSuccess = validationResult.IsValid, ErrorCodes = validationResult.Errors.Select(x => x.ErrorCode).Distinct().ToArray() }; return(result); } }