예제 #1
0
        /// <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;
        }
예제 #4
0
        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());
        }
예제 #5
0
        /// <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;
        }