public void Update(ShippingProviderMethod shippingProviderMethod, OrderInfo orderInfo)
            {
                if (orderInfo != null)
                {
                    // your logic here, and set the price at the end like this:

                    Log.Instance.LogDebug("Hoeveelheid artikelen totaal: " +
                                          orderInfo.OrderLines.Sum(x => x.ProductInfo.ItemCount));
                    Log.Instance.LogDebug("Hoeveel eerste artikel in mandje: " +
                                          orderInfo.OrderLines.First().ProductInfo.ItemCount);

                    // CALCULATE SHIPPING PRICE

                    int priceInCents;
                    var itemCount = orderInfo.OrderLines.Sum(line => line.ProductInfo.ItemCount.GetValueOrDefault(1));
                    if (itemCount == 1)
                        priceInCents = 500;
                    else if (itemCount == 2)
                        priceInCents = 400;
                    else
                        priceInCents = 0;
                    shippingProviderMethod.PriceInCents = priceInCents;

                    shippingProviderMethod.PriceInCents = 500;
                }
            }
        public IEnumerable<ShippingProviderMethod> GetAllShippingMethods(int id)
        {
            //var provider = new ShippingProvider(id);
            //var helper = new ShippingConfigHelper(provider);
            //var request = new ShippingRequest();
            //var orderInfo = OrderHelper.GetOrderInfo();

            var vat = Store.GetStore().GlobalVat;

            var order = Basket.GetBasket();

            if (order != null)
            {
                vat = order.AverageOrderVatPercentage;
            }

            var issuerId = "0";
            var issuerName = "Example";

            var method = new ShippingProviderMethod
            {
                ShippingProviderUpdateService =
                    new ExampleShippingProviderShippingProviderUpdateService(),
                Id = issuerId,
                Description = issuerName,
                Title = issuerName,
                Name = issuerName,
                ProviderName = GetName(),
                Vat = vat,
                PriceInCents = 500
            };

            return new List<ShippingProviderMethod> { method };
        }
		public ShippingMethodFulfillmentAdaptor(ShippingProviderMethod shippingProviderMethod, bool pricesIncludingVat, ILocalization localization, OrderInfo order)
		{
			_shippingProviderMethod = shippingProviderMethod;
			_pricesIncludingVat = pricesIncludingVat;
			_localization = localization;
			_order = order;
			Id = shippingProviderMethod.Id;
			Title = shippingProviderMethod.Title;
			Description = shippingProviderMethod.Description;
			Name = shippingProviderMethod.Name;
			Disabled = shippingProviderMethod.Disabled;
		}
		public void HavingAnActiveFreeShippingDiscount_ShouldReflectThatOnOrderParts()
		{
			IOC.OrderDiscountRepository.SetupNewMock().Setup(m => m.GetAll(It.IsAny<ILocalization>())).Returns(new List<IOrderDiscount> { new OrderDiscount { DiscountType = DiscountType.FreeShipping, MinimalOrderAmount =10000, Localization = StoreHelper.CurrentLocalization, RequiredItemIds = new List<int>(), MemberGroups = new List<string>(), AffectedOrderlines  = new List<int>()} });
			var order = DefaultFactoriesAndSharedFunctionality.CreateIncompleteOrderInfo(
				DefaultFactoriesAndSharedFunctionality.CreateProductInfo(40000, 1, 10m));
			IOC.OrderService.Resolve().UseDatabaseDiscounts(order);

			//var orderDiscountService = IOC.OrderDiscountService.Resolve();
			//var orderDiscounts = orderDiscountService.GetAll(new StubLocalization());
			//var discount = orderDiscounts.Single();
			//Assert.AreEqual(DiscountType.FreeShipping, discount.Type);
			
			//var filteredOrderDiscounts = orderDiscounts.Where(orderDiscount => !orderDiscount.Disabled && 40000 >= orderDiscount.MinimumOrderAmount.ValueInCents() && (!orderDiscount.RequiredItemIds.Any() /*|| _orderService.OrderContainsItem(order, orderDiscount.RequiredItemIds)*/) && (!orderDiscount.CounterEnabled || orderDiscount.Counter > 0));
			//Assert.AreEqual(1, filteredOrderDiscounts.Count());

			//var applicableDiscounts = orderDiscountService.GetApplicableDiscountsForOrder(order, order.Localization);
			//Assert.True(applicableDiscounts.Any());
			//Assert.AreEqual(DiscountType.FreeShipping, applicableDiscounts.Single().Type);

			Assert.NotNull(order.OrderDiscountsFactory);
			Assert.True(order.OrderDiscounts.Any());
			//Assert.False(order.OrderDiscountsWithoutFreeShipping.Any());
			Assert.True(order.FreeShipping);

			var shippingProviderMethod = new ShippingProviderMethod {PriceInCents = 1000};
			var adaptor = new ShippingMethodFulfillmentAdaptor(shippingProviderMethod, true, StoreHelper.CurrentLocalization, order);

			// freeshipping so chardgedshippingcosts should be 0
			Assert.AreEqual(0, order.ChargedShippingCostsInCents);

			Assert.AreEqual(0, adaptor.Amount.WithVat.ValueInCents);
			Assert.AreEqual(1000, adaptor.Amount.BeforeDiscount.WithVat.ValueInCents);
			Assert.AreEqual(1000, adaptor.Amount.Discount.WithVat.ValueInCents);
			Assert.AreEqual(0, adaptor.Amount.WithVat.ValueInCents);
			//Assert.AreEqual(1000, adaptor.Amount.BeforeDiscount.WithVat.ValueInCents);// wtf

			var discountedRanged = Price.CreateDiscountedRanged(shippingProviderMethod.PriceInCents, null, true, order.AverageOrderVatPercentage, null, i => (order.FreeShipping) ? 0 : i, StoreHelper.CurrentLocalization);
			Assert.AreEqual(0, discountedRanged.WithVat.ValueInCents);
			Assert.AreEqual(1000, discountedRanged.BeforeDiscount.WithVat.ValueInCents);
		}