private string CreatePriceList(string name)
		{
			using (var client = GetRepository())
			{
				var pricelist = new Pricelist { Name = name, Currency = "USD" };
				client.Add(pricelist);
				client.UnitOfWork.Commit();
				return pricelist.PricelistId;
			}
		}
		protected PricelistAssignment GeneratePrices(IEnumerable<Item> items, string catalogId)
		{
			var pricelist = new Pricelist
			{
				Currency = CustomerSessionService.CustomerSession.Currency,
				Name = "TestPrice",
			};

			foreach (var item in items)
			{
				var price = new Price
				{
					Sale = 100,
					List = 120,
					ItemId = item.ItemId,
					MinQuantity = 1,
					PricelistId = pricelist.PricelistId,
				};

				pricelist.Prices.Add(price);
			}

			var priceListAssignment = new PricelistAssignment
			{
				CatalogId = catalogId,
				Name = "testAssigment",
				Pricelist = pricelist,
				PricelistId = pricelist.PricelistId
			};

			PricelistRepository.Add(priceListAssignment);
			PricelistRepository.UnitOfWork.Commit();

			return priceListAssignment;
		}
 public PriceListOverviewStepViewModel(IRepositoryFactory<IPricelistRepository> repositoryFactory,
     IRepositoryFactory<IAppConfigRepository> appConfigRepositoryFactory, 
     ICatalogEntityFactory entityFactory, IAuthenticationContext authContext, Pricelist item)
     : base(repositoryFactory, appConfigRepositoryFactory,  entityFactory, authContext, item)
 {
 }
 public CreatePriceListViewModel(IViewModelsFactory<IPriceListOverviewStepViewModel> vmFactory, Pricelist item)
 {
     RegisterStep(vmFactory.GetViewModelInstance(new KeyValuePair<string, object>("item", item)));
 }
		public void Can_run_activity_validatelineitems()
		{
			var orderGroup = CreateCart();

			orderGroup.OrderForms[0].LineItems[0].Catalog = "default";
			orderGroup.OrderForms[0].LineItems[0].CatalogItemId = "v-9948444183";
			orderGroup.OrderForms[0].LineItems[0].FulfillmentCenterId = "default";
			orderGroup.OrderForms[0].LineItems[0].Quantity = 4;
			orderGroup.OrderForms[0].LineItems[1].Catalog = "default";
			orderGroup.OrderForms[0].LineItems[1].CatalogItemId = "v-b000068ilf";
			orderGroup.OrderForms[0].LineItems[1].FulfillmentCenterId = "default";
			orderGroup.OrderForms[0].LineItems[1].Quantity = 10;


			var invAvailable = new Inventory
				{
					AllowBackorder = true,
					AllowPreorder = true,
					FulfillmentCenterId = "default",
					InStockQuantity = 10,
					Sku = "v-9948444183",
					ReservedQuantity = 1,
					Status = InventoryStatus.Enabled.GetHashCode(),
					BackorderQuantity = 5,
					PreorderQuantity = 3
				};

			var invNotAvailable = new Inventory
				{
					AllowBackorder = true,
					AllowPreorder = true,
					FulfillmentCenterId = "default",
					InStockQuantity = 14,
					Sku = "v-b000068ilf",
					ReservedQuantity = 10,
					BackorderQuantity = 10,
					Status = InventoryStatus.Enabled.GetHashCode(),
					PreorderQuantity = 4
				};

			var mockUnitOfWork = new Mock<IUnitOfWork>();
			var repository = new Mock<IInventoryRepository>();
			repository.Setup(x => x.Inventories).Returns(() => new[] { invAvailable, invNotAvailable }.AsQueryable());
			repository.Setup(x => x.UnitOfWork).Returns(mockUnitOfWork.Object);
			repository.SetupAllProperties();

			var item1 = new Product
				{
					ItemId = "v-9948444183",
					TrackInventory = true,
					IsActive = true,
					IsBuyable = true,
					StartDate = DateTime.UtcNow.AddDays(-1),
					EndDate = DateTime.UtcNow.AddDays(1)
				};

			var item2 = new Product
				{
					ItemId = "v-b000068ilf",
					IsActive = true,
					IsBuyable = true,
					TrackInventory = true,
					StartDate = DateTime.UtcNow.AddDays(-1),
					EndDate = DateTime.UtcNow.AddDays(1)
				};

			var catrepository = new Mock<ICatalogRepository>();
			catrepository.Setup(x => x.Items).Returns(() => new Item[] { item1, item2 }.AsQueryable());
			catrepository.Setup(x => x.UnitOfWork).Returns(mockUnitOfWork.Object);
			catrepository.SetupAllProperties();

			var store = new Store { StoreId = orderGroup.StoreId, Catalog = orderGroup.OrderForms[0].LineItems[0].Catalog };
			var storeRepository = new Mock<IStoreRepository>();
			storeRepository.Setup(x => x.Stores).Returns(() => new[] { store }.AsQueryable());

			var priceList = new Pricelist { PricelistId = "default", Currency = "USD" };
			var priceList2 = new Pricelist { PricelistId = "sale", Currency = "USD" };
			var prices = new[] 
            {
                new Price { List = 100, Sale = 90, MinQuantity = 1, ItemId = "v-9948444183" , PricelistId = "default"},
                new Price { List = 95, Sale = 85, MinQuantity = 5, ItemId = "v-9948444183", PricelistId = "default"},
                new Price { List = 98, Sale = 88, MinQuantity = 1, ItemId = "v-9948444183" , PricelistId = "sale"},
                new Price { List = 93, Sale = 83, MinQuantity = 5, ItemId = "v-9948444183", PricelistId = "sale"},
                new Price { List = 60, Sale = 50, MinQuantity = 1, ItemId = "v-b000068ilf" , PricelistId = "default"},
                new Price { List = 55, Sale = 45, MinQuantity = 5, ItemId = "v-b000068ilf", PricelistId = "default"},
                new Price { List = 58, Sale = 48, MinQuantity = 1, ItemId = "v-b000068ilf" , PricelistId = "sale"},
                new Price { List = 53, Sale = 43, MinQuantity = 5, ItemId = "v-b000068ilf", PricelistId = "sale"}

            };

			var priceRepository = new Mock<IPricelistRepository>();
			priceRepository.Setup(x => x.Pricelists).Returns(() => new[] { priceList2, priceList }.AsQueryable());
			priceRepository.Setup(x => x.Prices).Returns(prices.AsQueryable);

			var customerService = new CustomerSessionService();
			var session = customerService.CustomerSession;
			session.Currency = "USD";
			session.Pricelists = new[] { "Sale", "Default" };

			var currencyService = new CurrencyService();

			var cacheRepository = new Mock<ICacheRepository>();
			cacheRepository.SetupAllProperties();

			var activity = new ValidateLineItemsActivity(repository.Object, catrepository.Object, storeRepository.Object, customerService, priceRepository.Object, currencyService, null, null, cacheRepository.Object);

			var result = InvokeActivity(activity, orderGroup);

			var order = result.OrderGroup;
			// now check totals            

			// Order totals
			// Order form totals
			var form = order.OrderForms[0];

			Assert.True(form.LineItems.Count == 2);
			Assert.True(form.LineItems[0].InStockQuantity == 9);
			Assert.True(form.LineItems[0].PreorderQuantity == 3);
			Assert.True(form.LineItems[0].ListPrice == 88);
			Assert.True(form.LineItems[1].ListPrice == 43);
		}