/// <summary> /// Clones a <see cref="ILineItemContainer"/> as <see cref="IItemCache"/> /// </summary> /// <param name="container"> /// The container. /// </param> /// <returns> /// The <see cref="IItemCache"/>. /// </returns> internal static IItemCache CloneItemCache(ILineItemContainer container) { var clone = new ItemCache(Guid.NewGuid(), ItemCacheType.Backoffice); foreach (var item in container.Items) { clone.Items.Add(item.AsLineItemOf<ItemCacheLineItem>()); } return clone; }
/// <summary> /// Creates a new <see cref="ILineItemContainer"/> with filtered items. /// </summary> /// <param name="filteredItems"> /// The line items. /// </param> /// <returns> /// The <see cref="ILineItemContainer"/>. /// </returns> protected ILineItemContainer CreateNewLineContainer(IEnumerable<ILineItem> filteredItems) { var lineItems = filteredItems as ILineItem[] ?? filteredItems.ToArray(); var result = new ItemCache(Guid.NewGuid(), ItemCacheType.Backoffice); if (!lineItems.Any()) return result; var itemCacheLineItems = lineItems.Select(x => x.AsLineItemOf<ItemCacheLineItem>()); result.Items.Add(itemCacheLineItems); return result; }
public static IItemCache AnonymousBasket(IAnonymousCustomer anonymous, ItemCacheType itemCacheType) { var itemCache = new ItemCache(anonymous.Key, itemCacheType) { Key = Guid.NewGuid(), CreateDate = DateTime.Now, UpdateDate = DateTime.Now }; itemCache.ResetDirtyProperties(); return itemCache; }
public void Can_Verify_A_Vistor_Visits_Every_Line_item() { //// Arrange const int itemCount = 10; var itemCache = new ItemCache(Guid.NewGuid(), ItemCacheType.Basket) { Key = Guid.NewGuid() }; for (var i = 0; i < itemCount; i++) { itemCache.AddItem(MockLineItemDataMaker.MockItemCacheLineItemComplete(itemCache.Key)); } //// Act var vistor = new MockLineItemVistor(); itemCache.Items.Accept(vistor); //// Assert Assert.AreEqual(itemCount, vistor.Visited.Count()); }
/// <summary> /// Creates a basket for a consumer with a given type /// </summary> public IItemCache GetItemCacheWithKey(ICustomerBase customer, ItemCacheType itemCacheType, Guid versionKey) { Mandate.ParameterCondition(Guid.Empty != versionKey, "versionKey"); // determine if the consumer already has a item cache of this type, if so return it. var itemCache = GetItemCacheByCustomer(customer, itemCacheType); if (itemCache != null) return itemCache; itemCache = new ItemCache(customer.EntityKey, itemCacheType) { VersionKey = versionKey }; if (Creating.IsRaisedEventCancelled(new Events.NewEventArgs<IItemCache>(itemCache), this)) { //registry.WasCancelled = true; return itemCache; } itemCache.EntityKey = customer.EntityKey; using (new WriteLock(Locker)) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateItemCacheRepository(uow)) { repository.AddOrUpdate(itemCache); uow.Commit(); } } Created.RaiseEvent(new Events.NewEventArgs<IItemCache>(itemCache), this); return itemCache; }