private Dictionary <ILineItem, List <ValidationIssue> > UpdateLineItemSku(ICart cart, int shipmentId, string oldCode, string newCode, decimal quantity) { RemoveLineItem(cart, shipmentId, oldCode); //merge same sku's var newLineItem = GetFirstLineItem(cart, newCode); if (newLineItem != null) { var shipment = cart.GetFirstForm().Shipments.First(s => s.ShipmentId == shipmentId || shipmentId == 0); cart.UpdateLineItemQuantity(shipment, newLineItem, newLineItem.Quantity + quantity); } else { newLineItem = cart.CreateLineItem(newCode, _orderGroupFactory); newLineItem.Quantity = quantity; cart.AddLineItem(newLineItem, _orderGroupFactory); var price = PriceCalculationService.GetSalePrice(newCode, cart.MarketId, _currentMarket.GetCurrentMarket().DefaultCurrency); if (price != null) { newLineItem.PlacedPrice = price.UnitPrice.Amount; } } return(ValidateCart(cart)); }
private void UpdateLineItemSku(ICart cart, int shipmentId, string oldCode, string newCode, decimal quantity) { RemoveLineItem(cart, shipmentId, oldCode); //merge same sku's var newLineItem = GetFirstLineItem(cart, newCode); if (newLineItem != null) { var shipment = cart.GetFirstForm().Shipments.First(s => s.ShipmentId == shipmentId || shipmentId == 0); cart.UpdateLineItemQuantity(shipment, newLineItem, newLineItem.Quantity + quantity); } else { newLineItem = cart.CreateLineItem(newCode, _orderGroupFactory); newLineItem.Quantity = quantity; cart.AddLineItem(newLineItem, _orderGroupFactory); var price = _pricingService.GetCurrentPrice(newCode); if (price.HasValue) { newLineItem.PlacedPrice = price.Value.Amount; } } ValidateCart(cart); }
public bool AddToCart(ICart cart, string code, out string warningMessage) { warningMessage = string.Empty; var lineItem = cart.GetAllLineItems().FirstOrDefault(x => x.Code == code); if (lineItem == null) { lineItem = cart.CreateLineItem(code, _orderGroupFactory); lineItem.Quantity = 1; cart.AddLineItem(lineItem, _orderGroupFactory); } else { var shipment = cart.GetFirstShipment(); cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + 1); } var validationIssues = ValidateCart(cart); foreach (var validationIssue in validationIssues) { warningMessage += String.Format("Line Item with code {0} ", lineItem.Code); warningMessage = validationIssue.Value.Aggregate(warningMessage, (current, issue) => current + String.Format("{0}, ", issue)); warningMessage = warningMessage.Substring(0, warningMessage.Length - 2); } if (validationIssues.HasItemBeenRemoved(lineItem)) { return(false); } return(GetFirstLineItem(cart, code) != null); }
public void AddLineItem() { var lineItem = _cart.CreateLineItem(Constants.VariationCode, _orderGroupFactory); lineItem.Quantity = 1; lineItem.IsInventoryAllocated = true; lineItem.PlacedPrice = 100; lineItem.Properties["Custom"] = true; _cart.AddLineItem(lineItem, _orderGroupFactory); _orderRepository.Save(_cart); }
public ILineItem AddLineItem(ICart cart, string newCode, decimal quantity, string displayName) { var newLineItem = cart.CreateLineItem(newCode, _orderGroupFactory.Service); newLineItem.Quantity = quantity; newLineItem.DisplayName = displayName; cart.AddLineItem(newLineItem, _orderGroupFactory.Service); var price = _priceService.Service.GetDefaultPrice(cart.MarketId, DateTime.Today, new CatalogKey(newCode), cart.Currency); newLineItem.PlacedPrice = price.UnitPrice.Amount; return(newLineItem); }
private ILineItem AddNewLineItem(ICart cart, string newCode, decimal quantity, string displayName) { var newLineItem = cart.CreateLineItem(newCode, _orderGroupFactory); newLineItem.Quantity = quantity; newLineItem.DisplayName = displayName; cart.AddLineItem(newLineItem, _orderGroupFactory); var price = _pricingService.GetPrice(newCode); if (price != null) { newLineItem.PlacedPrice = price.UnitPrice.Amount; } return newLineItem; }
public AddToCartResult AddToCart(ICart cart, string code, decimal quantity) { var result = new AddToCartResult(); var contentLink = _referenceConverter.GetContentLink(code); var entryContent = _contentLoader.Get <EntryContentBase>(contentLink); if (entryContent is BundleContent) { foreach (var relation in _relationRepository.GetRelationsBySource <BundleEntry>(contentLink)) { var entry = _contentLoader.Get <EntryContentBase>(relation.Target); var recursiveResult = AddToCart(cart, entry.Code, relation.Quantity ?? 1); if (recursiveResult.EntriesAddedToCart) { result.EntriesAddedToCart = true; } foreach (var message in recursiveResult.ValidationMessages) { result.ValidationMessages.Add(message); } } return(result); } var lineItem = cart.GetAllLineItems().FirstOrDefault(x => x.Code == code); if (lineItem == null) { lineItem = cart.CreateLineItem(code, _orderGroupFactory); lineItem.DisplayName = entryContent.DisplayName; lineItem.Quantity = quantity; cart.AddLineItem(lineItem, _orderGroupFactory); } else { var shipment = cart.GetFirstShipment(); cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + quantity); } var validationIssues = ValidateCart(cart); AddValidationMessagesToResult(result, lineItem, validationIssues); return(result); }
private static ICart Insert(this ICart cart, string code, int quantity, string displayName) { var lineItem = cart.CreateLineItem(code, _orderGroupFactory); lineItem.DisplayName = displayName; lineItem.Quantity = quantity; cart.AddLineItem(lineItem, _orderGroupFactory); var price = _customerPriceService.GetPrice(code); if (price != null) { lineItem.PlacedPrice = price.UnitPrice.Amount; } return(cart); }
private static void AddNewLineItem(ICart cart, string newCode, decimal quantity, string displayName) { var newLineItem = cart.CreateLineItem(newCode); newLineItem.Quantity = quantity; newLineItem.DisplayName = displayName; cart.AddLineItem(newLineItem); var price = _priceService.Service.GetPrices(cart.MarketId, DateTime.Now, new CatalogKey(newCode), new PriceFilter { Currencies = new[] { cart.Currency } }) .OrderBy(x => x.UnitPrice.Amount).FirstOrDefault(); if (price != null) { newLineItem.PlacedPrice = price.UnitPrice.Amount; } }
public static void AddToCart(ICart cart, string code, decimal quantity) { var contentLink = _referenceConverter.Service.GetContentLink(code); var entryContent = _contentLoader.Service.Get <EntryContentBase>(contentLink); if (entryContent is BundleContent) { foreach (var relation in _relationRepository.Service.GetChildren <BundleEntry>(contentLink)) { var entry = _contentLoader.Service.Get <EntryContentBase>(relation.Child); AddToCart(cart, entry.Code, relation.Quantity ?? 1); } return; } var lineItem = cart.CreateLineItem(code); lineItem.Quantity = quantity; AddNewLineItem(cart, lineItem.Code, quantity, entryContent.DisplayName); }
public void RecreateLineItemsBasedOnShipments(ICart cart, IEnumerable <CartItemViewModel> cartItems, IEnumerable <AddressModel> addresses) { var form = cart.GetFirstForm(); var items = cartItems .GroupBy(x => new { x.AddressId, x.Code, x.DisplayName, x.IsGift }) .Select(x => new { Code = x.Key.Code, DisplayName = x.Key.DisplayName, AddressId = x.Key.AddressId, Quantity = x.Count(), IsGift = x.Key.IsGift }); foreach (var shipment in form.Shipments) { shipment.LineItems.Clear(); } form.Shipments.Clear(); foreach (var address in addresses) { var shipment = cart.CreateShipment(_orderGroupFactory); form.Shipments.Add(shipment); shipment.ShippingAddress = _addressBookService.ConvertToAddress(address, cart); foreach (var item in items.Where(x => x.AddressId == address.AddressId)) { var lineItem = cart.CreateLineItem(item.Code, _orderGroupFactory); lineItem.DisplayName = item.DisplayName; lineItem.IsGift = item.IsGift; lineItem.Quantity = item.Quantity; shipment.LineItems.Add(lineItem); } } ValidateCart(cart); }
public AddToCartResult AddToCart(ICart cart, string code, string warehouseCode, decimal quantity) { var result = new AddToCartResult(); var contentLink = _referenceConverter.GetContentLink(code); var entryContent = _contentLoader.Get <EntryContentBase>(contentLink); if (entryContent is BundleContent) { foreach (var relation in _relationRepository.GetChildren <BundleEntry>(contentLink)) { var entry = _contentLoader.Get <EntryContentBase>(relation.Child); var recursiveResult = AddToCart(cart, entry.Code, warehouseCode, relation.Quantity ?? 1); if (recursiveResult.EntriesAddedToCart) { result.EntriesAddedToCart = true; } foreach (var message in recursiveResult.ValidationMessages) { result.ValidationMessages.Add(message); } } return(result); } ILineItem lineItem = null; if (!string.IsNullOrEmpty(warehouseCode)) { IShipment shipment = null; if (cart.GetFirstForm().Shipments.Count == 1 && string.IsNullOrEmpty(cart.GetFirstForm().Shipments.First().WarehouseCode)) { shipment = cart.GetFirstForm().Shipments.First(); shipment.WarehouseCode = warehouseCode; } else { shipment = cart.GetFirstForm().Shipments.FirstOrDefault(s => s.WarehouseCode.Equals(warehouseCode, StringComparison.CurrentCultureIgnoreCase)); } if (shipment == null) { shipment = cart.CreateShipment(_orderGroupFactory); shipment.WarehouseCode = warehouseCode; cart.AddShipment(shipment); } lineItem = shipment.LineItems.FirstOrDefault(x => x.Code == code && !x.IsGift); if (lineItem == null) { //this is just like AddNewLineItem but doesn't add there - adds to shipment instead lineItem = cart.CreateLineItem(code, _orderGroupFactory); lineItem.Quantity = quantity; lineItem.DisplayName = entryContent.DisplayName; //cart.AddLineItem(newLineItem, _orderGroupFactory); var price = _pricingService.GetPrice(code); if (price != null) { lineItem.PlacedPrice = price.UnitPrice.Amount; } cart.AddLineItem(shipment, lineItem); } else { cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + quantity); } } else { lineItem = cart.GetAllLineItems().FirstOrDefault(x => x.Code == code && !x.IsGift); if (lineItem == null) { lineItem = AddNewLineItem(cart, code, quantity, entryContent.DisplayName); } else { var shipment = cart.GetFirstShipment(); cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + quantity); } } var validationIssues = ValidateCart(cart); AddValidationMessagesToResult(result, lineItem, validationIssues); return(result); }
private AddToCartResult AddItemToShipment(ICart cart, EntryContentBase entryContent, decimal quantity, int shipmentId, string deliveryMethodId, string warehouseCode) { var result = new AddToCartResult(); IWarehouse warehouse = null; if (!string.IsNullOrEmpty(warehouseCode)) { warehouse = _warehouseRepository.Get(warehouseCode); } if (entryContent is BundleContent) { foreach (var relation in _relationRepository.GetChildren <BundleEntry>(entryContent.ContentLink)) { var entry = _contentLoader.Get <EntryContentBase>(relation.Child); var recursiveResult = AddItemToShipment(cart, entry, (relation.Quantity ?? 1) * quantity, shipmentId, deliveryMethodId, warehouseCode); if (recursiveResult.EntriesAddedToCart) { result.EntriesAddedToCart = true; } foreach (var message in recursiveResult.ValidationMessages) { result.ValidationMessages.Add(message); } } return(result); } var form = cart.GetFirstForm(); if (form == null) { form = _orderGroupFactory.CreateOrderForm(cart); form.Name = cart.Name; cart.Forms.Add(form); } var shipment = form.Shipments.FirstOrDefault(x => x.ShipmentId == shipmentId); if (shipment == null) { shipment = _orderGroupFactory.CreateShipment(cart); shipment.WarehouseCode = warehouseCode; shipment.ShippingMethodId = new Guid(deliveryMethodId); shipment.ShippingAddress = GetOrderAddressFromWarehosue(cart, warehouse); cart.GetFirstForm().Shipments.Add(shipment); } var lineItem = shipment.LineItems.FirstOrDefault(x => x.Code == entryContent.Code); decimal originalLineItemQuantity = 0; if (lineItem == null) { lineItem = cart.CreateLineItem(entryContent.Code, _orderGroupFactory); lineItem.DisplayName = entryContent.DisplayName; lineItem.Quantity = quantity; cart.AddLineItem(shipment, lineItem); } else { originalLineItemQuantity = lineItem.Quantity; cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + quantity); } var validationIssues = ValidateCart(cart); var newLineItem = shipment.LineItems.FirstOrDefault(x => x.Code == entryContent.Code); var isAdded = (newLineItem != null ? newLineItem.Quantity : 0) - originalLineItemQuantity > 0; AddValidationMessagesToResult(result, lineItem, validationIssues, isAdded); return(result); }
public AddToCartResult AddToCart(ICart cart, EntryContentBase entryContent, decimal quantity, string deliveryMethod, string warehouseCode, List <string> dynamicVariantOptionCodes) { var result = new AddToCartResult(); var contact = PrincipalInfo.CurrentPrincipal.GetCustomerContact(); if (contact?.OwnerId != null) { var org = cart.GetString("OwnerOrg"); if (string.IsNullOrEmpty(org)) { cart.Properties["OwnerOrg"] = contact.OwnerId.Value.ToString().ToLower(); } } IWarehouse warehouse = null; if (deliveryMethod.Equals("instore") && !string.IsNullOrEmpty(warehouseCode)) { warehouse = _warehouseRepository.Get(warehouseCode); } if (entryContent is BundleContent) { foreach (var relation in _relationRepository.GetChildren <BundleEntry>(entryContent.ContentLink)) { var entry = _contentLoader.Get <EntryContentBase>(relation.Child); var recursiveResult = AddToCart(cart, entry, (relation.Quantity ?? 1) * quantity, deliveryMethod, warehouseCode, dynamicVariantOptionCodes); if (recursiveResult.EntriesAddedToCart) { result.EntriesAddedToCart = true; } foreach (var message in recursiveResult.ValidationMessages) { result.ValidationMessages.Add(message); } } return(result); } var form = cart.GetFirstForm(); if (form == null) { form = _orderGroupFactory.CreateOrderForm(cart); form.Name = cart.Name; cart.Forms.Add(form); } var shipment = cart.GetFirstForm().Shipments.FirstOrDefault(x => string.IsNullOrEmpty(warehouseCode) || (x.WarehouseCode == warehouseCode && x.ShippingMethodId == InStorePickupInfoModel.MethodId)); if (warehouse != null) { if (shipment != null && !shipment.LineItems.Any()) { shipment.WarehouseCode = warehouseCode; shipment.ShippingMethodId = InStorePickupInfoModel.MethodId; shipment.ShippingAddress = GetOrderAddressFromWarehosue(cart, warehouse); } else { shipment = form.Shipments.FirstOrDefault(x => !string.IsNullOrEmpty(x.WarehouseCode) && x.WarehouseCode.Equals(warehouse.Code)); if (shipment == null) { if (cart.GetFirstShipment().LineItems.Count > 0) { shipment = _orderGroupFactory.CreateShipment(cart); } else { shipment = cart.GetFirstShipment(); } shipment.WarehouseCode = warehouseCode; shipment.ShippingMethodId = InStorePickupInfoModel.MethodId; shipment.ShippingAddress = GetOrderAddressFromWarehosue(cart, warehouse); if (cart.GetFirstShipment().LineItems.Count > 0) { cart.GetFirstForm().Shipments.Add(shipment); } } } } if (shipment == null) { var cartFirstShipment = cart.GetFirstShipment(); if (cartFirstShipment == null) { shipment = _orderGroupFactory.CreateShipment(cart); cart.GetFirstForm().Shipments.Add(shipment); } else { if (cartFirstShipment.LineItems.Count > 0) { shipment = _orderGroupFactory.CreateShipment(cart); cart.GetFirstForm().Shipments.Add(shipment); } else { shipment = cartFirstShipment; } } } var lineItem = shipment.LineItems.FirstOrDefault(x => x.Code == entryContent.Code); decimal originalLineItemQuantity = 0; if (lineItem == null) { lineItem = cart.CreateLineItem(entryContent.Code, _orderGroupFactory); var lineDisplayName = entryContent.DisplayName; if (dynamicVariantOptionCodes?.Count > 0) { lineItem.Properties[VariantOptionCodesProperty] = string.Join(",", dynamicVariantOptionCodes.OrderBy(x => x)); lineDisplayName += " - " + lineItem.Properties[VariantOptionCodesProperty]; } lineItem.DisplayName = lineDisplayName; lineItem.Quantity = quantity; cart.AddLineItem(shipment, lineItem); } else { if (lineItem.Properties[VariantOptionCodesProperty] != null) { var variantOptionCodesLineItem = lineItem.Properties[VariantOptionCodesProperty].ToString().Split(','); var intersectCodes = variantOptionCodesLineItem.Intersect(dynamicVariantOptionCodes); if (intersectCodes != null && intersectCodes.Any() && intersectCodes.Count() == variantOptionCodesLineItem.Length && intersectCodes.Count() == dynamicVariantOptionCodes.Count) { originalLineItemQuantity = lineItem.Quantity; cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + quantity); } else { lineItem = cart.CreateLineItem(entryContent.Code, _orderGroupFactory); lineItem.Properties[VariantOptionCodesProperty] = string.Join(",", dynamicVariantOptionCodes.OrderBy(x => x)); lineItem.DisplayName = entryContent.DisplayName + " - " + lineItem.Properties[VariantOptionCodesProperty]; lineItem.Quantity = quantity; cart.AddLineItem(shipment, lineItem); } } else { originalLineItemQuantity = lineItem.Quantity; cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + quantity); } } var validationIssues = ValidateCart(cart); var newLineItem = shipment.LineItems.FirstOrDefault(x => x.Code == entryContent.Code); var isAdded = (newLineItem != null ? newLineItem.Quantity : 0) - originalLineItemQuantity > 0; AddValidationMessagesToResult(result, lineItem, validationIssues, isAdded); return(result); }
public AddToCartResult AddToCart(ICart cart, EntryContentBase entryContent, decimal quantity, string deliveryMethod, string warehouseCode) { var result = new AddToCartResult(); var contact = PrincipalInfo.CurrentPrincipal.GetCustomerContact(); if (contact?.OwnerId != null) { var org = cart.GetString("OwnerOrg"); if (string.IsNullOrEmpty(org)) { cart.Properties["OwnerOrg"] = contact.OwnerId.Value.ToString().ToLower(); } } IWarehouse warehouse = null; if (deliveryMethod.Equals("instore") && !string.IsNullOrEmpty(warehouseCode)) { warehouse = _warehouseRepository.Get(warehouseCode); } if (entryContent is BundleContent) { foreach (var relation in _relationRepository.GetChildren <BundleEntry>(entryContent.ContentLink)) { var entry = _contentLoader.Get <EntryContentBase>(relation.Child); var recursiveResult = AddToCart(cart, entry, relation.Quantity ?? 1, deliveryMethod, warehouseCode); if (recursiveResult.EntriesAddedToCart) { result.EntriesAddedToCart = true; } foreach (var message in recursiveResult.ValidationMessages) { result.ValidationMessages.Add(message); } } return(result); } var form = cart.GetFirstForm(); if (form == null) { form = _orderGroupFactory.CreateOrderForm(cart); form.Name = cart.Name; cart.Forms.Add(form); } var shipment = cart.GetFirstShipment(); if (warehouse != null) { if (shipment != null && !shipment.LineItems.Any()) { shipment.WarehouseCode = warehouseCode; shipment.ShippingMethodId = InStorePickupInfoModel.MethodId; shipment.ShippingAddress = GetOrderAddressFromWarehosue(cart, warehouse); } else { shipment = form.Shipments.FirstOrDefault(x => !string.IsNullOrEmpty(x.WarehouseCode) && x.WarehouseCode.Equals(warehouse.Code)); if (shipment == null) { shipment = _orderGroupFactory.CreateShipment(cart); shipment.WarehouseCode = warehouseCode; shipment.ShippingMethodId = InStorePickupInfoModel.MethodId; cart.GetFirstForm().Shipments.Add(shipment); shipment.ShippingAddress = GetOrderAddressFromWarehosue(cart, warehouse); } } } if (shipment == null) { shipment = _orderGroupFactory.CreateShipment(cart); cart.GetFirstForm().Shipments.Add(shipment); } var lineItem = cart.GetAllLineItems().FirstOrDefault(x => x.Code == entryContent.Code); if (lineItem == null) { lineItem = cart.CreateLineItem(entryContent.Code, _orderGroupFactory); lineItem.DisplayName = entryContent.DisplayName; lineItem.Quantity = quantity; cart.AddLineItem(shipment, lineItem); } else { cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + quantity); } var validationIssues = ValidateCart(cart); AddValidationMessagesToResult(result, lineItem, validationIssues); return(result); }