public virtual IEnumerable<ShipmentViewModel> CreateShipmentsViewModel(ICart cart)
        {
            foreach (var shipment in cart.GetFirstForm().Shipments)
            {
                var shipmentModel = new ShipmentViewModel
                {
                    ShipmentId = shipment.ShipmentId,
                    CartItems = new List<CartItemViewModel>(),
                    Address = _addressBookService.ConvertToModel(shipment.ShippingAddress),
                    ShippingMethods = CreateShippingMethodViewModels(cart.Market, cart.Currency, shipment)
                };

                shipmentModel.ShippingMethodId = shipment.ShippingMethodId == Guid.Empty ? shipmentModel.ShippingMethods.First().Id : shipment.ShippingMethodId;

                var variants = _contentLoader.GetItems(shipment.LineItems.Select(x => _referenceConverter.GetContentLink(x.Code)),
                    _preferredCulture).OfType<VariationContent>();

                foreach (var lineItem in shipment.LineItems)
                {
                    var variant = variants.Single(x => x.Code == lineItem.Code);

                    var productLink = variant.GetParentProducts(_relationRepository).FirstOrDefault();
                    if (ContentReference.IsNullOrEmpty(productLink))
                    {
                        continue;
                    }

                    shipmentModel.CartItems.Add(_cartItemViewModelFactory.CreateCartItemViewModel(cart, lineItem, variant));
                }

                yield return shipmentModel;
            }
        }
示例#2
0
 public void Execute(ICart cart)
 {
     orderProcessor.ProcessOrder(
         cart.OrderId,
         wasOk => { if (wasOk) events.RaiseOrderProcessed(cart.OrderId); }
     );
 }
示例#3
0
		public Intellivision(CoreComm comm, GameInfo game, byte[] rom)
		{
			CoreComm = comm;

			Rom = rom;
			Game = game;
			Cart = new Intellicart();
			if (Cart.Parse(Rom) == -1)
			{
				Cart = new Cartridge();
				Cart.Parse(Rom);
			}

			Cpu = new CP1610();
			Cpu.ReadMemory = ReadMemory;
			Cpu.WriteMemory = WriteMemory;
			Cpu.Reset();

			Stic = new STIC();
			Stic.ReadMemory = ReadMemory;
			Stic.WriteMemory = WriteMemory;
			Stic.Reset();

			Psg = new PSG();
			Psg.ReadMemory = ReadMemory;
			Psg.WriteMemory = WriteMemory;

			Connect();

			Cpu.LogData();

			LoadExecutiveRom(CoreComm.CoreFileProvider.GetFirmwarePath("INTV", "EROM", true, "Executive ROM is required."));
			LoadGraphicsRom(CoreComm.CoreFileProvider.GetFirmwarePath("INTV", "GROM", true, "Graphics ROM is required."));
		}
        public virtual OrderSummaryViewModel CreateOrderSummaryViewModel(ICart cart)
        {
            if (cart == null)
            {
                return CreateEmptyOrderSummaryViewModel();
            }

            var totals = _orderGroupTotalsCalculator.GetTotals(cart);

            return new OrderSummaryViewModel
            {
                SubTotal = totals.SubTotal,
                CartTotal = totals.Total,
                ShippingTotal = totals.ShippingTotal,
                ShippingSubtotal = cart.GetShippingSubTotal(_shippingCalculator),
                OrderDiscountTotal = cart.GetOrderDiscountTotal(cart.Currency, _orderGroupCalculator),
                ShippingDiscountTotal = cart.GetShippingDiscountTotal(_shippingCalculator),
                ShippingTaxTotal = totals.ShippingTotal + totals.TaxTotal,
                TaxTotal = totals.TaxTotal,
                OrderDiscounts = cart.GetFirstForm().Promotions.Where(x => x.DiscountType == DiscountType.Order).Select(x => new OrderDiscountViewModel
                {
                    Discount = new Money(x.SavedAmount, new Currency(cart.Currency)),
                    DisplayName = x.Description
                })
            };
        }
示例#5
0
 public HomeController(ICategory catsvc,IProduct prodsvc,ICart cartsvc, ICheckout checkoutsvc, ICommon commonsvc)
 {
     _categoryService = catsvc;
     _productService = prodsvc;
     _cartService = cartsvc;
     _checkoutService = checkoutsvc;
     _commonService = commonsvc;
 }
 public PriceCalculator(ICart cart)
 {
     this.cart = cart;
     itemList = new List<ShopItem>
                {
                    new ShopItem("A99", 50, 3, 130),
                    new ShopItem("B15", 30, 2, 45),
                    new ShopItem("C40", 60),
                    new ShopItem("T34", 99)
                };
 }
        public ShipmentViewModelFactoryTests()
        {
            _cart = new FakeCart(new MarketImpl(new MarketId(Currency.USD)), Currency.USD) { Name = "Default" };
            _cart.Forms.Single().Shipments.Single().LineItems.Add(new InMemoryLineItem { Code = "code"});
            _cart.Forms.Single().CouponCodes.Add("couponcode");

            var shippingManagerFacadeMock = new Mock<ShippingManagerFacade>();
            shippingManagerFacadeMock.Setup(x => x.GetShippingMethodsByMarket(It.IsAny<string>(), It.IsAny<bool>())).Returns(() => new List<ShippingMethodInfoModel>
            {
                new ShippingMethodInfoModel
                {
                    LanguageId = CultureInfo.InvariantCulture.TwoLetterISOLanguageName,
                    Currency = Currency.USD
                }
            });
            _shippingRate = new ShippingRate(Guid.NewGuid(), "name", new Money(10, Currency.USD));
            shippingManagerFacadeMock.Setup(x => x.GetRate(It.IsAny<IShipment>(), It.IsAny<ShippingMethodInfoModel>(), It.IsAny<IMarket>()))
                .Returns(_shippingRate);

            var languageServiceMock = new Mock<LanguageService>(null, null, null, null);
            languageServiceMock.Setup(x => x.GetCurrentLanguage()).Returns(CultureInfo.InvariantCulture);

            var referenceConverterMock = new Mock<ReferenceConverter>(null,null);

            var addressBookServiceMock = new Mock<IAddressBookService>();
            _addressModel = new AddressModel();
            addressBookServiceMock.Setup(x => x.ConvertToModel(It.IsAny<IOrderAddress>())).Returns(_addressModel);

            _cartItem = new CartItemViewModel ();
            var cartItemViewModelFactoryMock = new Mock<CartItemViewModelFactory>(null,null,null,null,null,null,null,null,null,null, null);
            cartItemViewModelFactoryMock.Setup(x => x.CreateCartItemViewModel(It.IsAny<ICart>(), It.IsAny<ILineItem>(), It.IsAny<VariationContent>())).Returns(_cartItem);

            var contentLoaderMock = new Mock<IContentLoader>();
            contentLoaderMock.Setup(x => x.GetItems(It.IsAny<IEnumerable<ContentReference>>(), It.IsAny<CultureInfo>()))
                .Returns(() => new List<VariationContent> {new VariationContent {Code = "code"} });

            var relationRepositoryMock = new Mock<IRelationRepository>();
            relationRepositoryMock.Setup(x => x.GetRelationsByTarget<ProductVariation>(It.IsAny<ContentReference>()))
                .Returns(() => new[] {new ProductVariation {Source = new ContentReference(1)}});

            _subject = new ShipmentViewModelFactory(
                contentLoaderMock.Object,
                shippingManagerFacadeMock.Object,
                languageServiceMock.Object,
                referenceConverterMock.Object,
                addressBookServiceMock.Object,
                cartItemViewModelFactoryMock.Object,
                () => CultureInfo.GetCultureInfo("en"),
                relationRepositoryMock.Object);    
        }
        public virtual CheckoutViewModel CreateCheckoutViewModel(ICart cart, CheckoutPage currentPage, IPaymentMethodViewModel<PaymentMethodBase> paymentViewModel = null)
        {
            if (cart == null)
            {
                return CreateEmptyCheckoutViewModel(currentPage);
            }

            var shipments = _shipmentViewModelFactory.CreateShipmentsViewModel(cart).ToList();

            var viewModel = new CheckoutViewModel
            {
                CurrentPage = currentPage,
                Shipments = shipments,
                BillingAddress = CreateBillingAddressModel(),
                UseBillingAddressForShipment = shipments.Count == 1 && _addressBookService.UseBillingAddressForShipment(),
                StartPage = _contentLoader.Get<StartPage>(ContentReference.StartPage),
                AppliedCouponCodes = cart.GetFirstForm().CouponCodes.Distinct(),
                AvailableAddresses = new List<AddressModel>(),
                ReferrerUrl = GetReferrerUrl(),
                Payment = paymentViewModel,
            };

            UpdatePayment(viewModel);
                        
            var availableAddresses = GetAvailableAddresses();

            if (availableAddresses.Any())
            {
                viewModel.AvailableAddresses.Add(new AddressModel { Name = _localizationService.GetString("/Checkout/MultiShipment/SelectAddress") });
                
                foreach (var address in availableAddresses)
                {
                    viewModel.AvailableAddresses.Add(address);
                }
            }
            else
            {
                viewModel.AvailableAddresses.Add(new AddressModel { Name = _localizationService.GetString("/Checkout/MultiShipment/NoAddressFound") });
            }

            SetDefaultShipmentAddress(viewModel);

            _addressBookService.LoadAddress(viewModel.BillingAddress);
            PopulateCountryAndRegions(viewModel);

            return viewModel;
        }
        public virtual MultiShipmentViewModel CreateMultiShipmentViewModel(ICart cart, bool isAuthenticated)
        {
            var viewModel = new MultiShipmentViewModel
            {
                StartPage = _contentLoader.Get<StartPage>(ContentReference.StartPage),
                AvailableAddresses = GetAvailableShippingAddresses(),
                CartItems = cart != null ? FlattenCartItems(_shipmentViewModelFactory.CreateShipmentsViewModel(cart).SelectMany(x => x.CartItems)) : new CartItemViewModel[0],
                ReferrerUrl = GetReferrerUrl()
            };

            if (!isAuthenticated)
            {
                UpdateShippingAddressesForAnonymous(viewModel);
            }

            return viewModel;
        }
        public MultiShipmentViewModelFactoryTests()
        {
            _cart = new FakeCart(new MarketImpl(new MarketId(Currency.USD)), Currency.USD);
            _cart.Forms.Single().Shipments.Single().LineItems.Add(new InMemoryLineItem ());
            _cart.Forms.Single().CouponCodes.Add("couponcode");

            var addressBookServiceMock = new Mock<IAddressBookService>();
            addressBookServiceMock.Setup(x => x.List()).Returns(() => new List<AddressModel> { new AddressModel { AddressId = "addressid" } });
            var preferredBillingAddress = CustomerAddress.CreateInstance();
            preferredBillingAddress.Name = "preferredBillingAddress";
            addressBookServiceMock.Setup(x => x.GetPreferredBillingAddress()).Returns(preferredBillingAddress);
            addressBookServiceMock.Setup(x => x.UseBillingAddressForShipment()).Returns(true);

            _startPage = new StartPage();
            var contentLoaderMock = new Mock<IContentLoader>();
            contentLoaderMock.Setup(x => x.Get<StartPage>(It.IsAny<PageReference>())).Returns(_startPage);

            var urlResolverMock = new Mock<UrlResolver>();

            var httpcontextMock = new Mock<HttpContextBase>();
            var requestMock = new Mock<HttpRequestBase>();
            requestMock.Setup(x => x.Url).Returns(new Uri("http://site.com"));
            requestMock.Setup(x => x.UrlReferrer).Returns(new Uri("http://site.com"));
            httpcontextMock.Setup(x => x.Request).Returns(requestMock.Object);

            PreferredCultureAccessor accessor = () => CultureInfo.InvariantCulture;
            var shipmentViewModelFactoryMock = new Mock<ShipmentViewModelFactory>(null, null, null, null, null, null, accessor, null);
            shipmentViewModelFactoryMock.Setup(x => x.CreateShipmentsViewModel(It.IsAny<ICart>())).Returns(() => new[]
            {
                new ShipmentViewModel {CartItems = new[]
                {
                    new CartItemViewModel { Quantity = 1 }
                }
            }
            });

            _subject = new MultiShipmentViewModelFactory(
                new MemoryLocalizationService(),
                addressBookServiceMock.Object,
                contentLoaderMock.Object,
                urlResolverMock.Object,
                (() => httpcontextMock.Object),
                shipmentViewModelFactoryMock.Object);
        }
示例#11
0
        /// <summary>
        /// Validates and completes a cart.
        /// </summary>
        /// <param name="cart">The cart.</param>
        /// <param name="errorMessages">The error messages.</param>
        private bool DoCompletingCart(ICart cart, IList <string> errorMessages)
        {
            var isSuccess = true;

            if (_featureSwitch.IsSerializedCartsEnabled())
            {
                var validationIssues = new Dictionary <ILineItem, IList <ValidationIssue> >();
                cart.AdjustInventoryOrRemoveLineItems((item, issue) => AddValidationIssues(validationIssues, item, issue), _inventoryProcessor);

                isSuccess = !validationIssues.Any();

                foreach (var issue in validationIssues.Values.SelectMany(x => x).Distinct())
                {
                    if (issue == ValidationIssue.RejectedInventoryRequestDueToInsufficientQuantity)
                    {
                        errorMessages.Add(Utilities.Translate("NotEnoughStockWarning"));
                    }
                    else
                    {
                        errorMessages.Add(Utilities.Translate("CartValidationWarning"));
                    }
                }

                return(isSuccess);
            }

            // Execute CheckOutWorkflow with parameter to ignore running process payment activity again.
            var isIgnoreProcessPayment = new Dictionary <string, object> {
                { "PreventProcessPayment", true }
            };
            var workflowResults = OrderGroupWorkflowManager.RunWorkflow((OrderGroup)cart, OrderGroupWorkflowManager.CartCheckOutWorkflowName, true, isIgnoreProcessPayment);

            var warnings = workflowResults.OutputParameters["Warnings"] as StringDictionary;

            isSuccess = warnings.Count == 0;

            foreach (string message in warnings.Values)
            {
                errorMessages.Add(message);
            }

            return(isSuccess);
        }
示例#12
0
        private void UpdateLineItemSku(ICart cart, int shipmentId, string oldCode, string newCode, decimal quantity, string displayName)
        {
            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
            {
                AddNewLineItem(cart, newCode, quantity, displayName);
            }

            ValidateCart(cart);
        }
示例#13
0
 public void ChangeCartItem(ICart cart, int shipmentId, string code, decimal quantity, string size, string newSize, string displayName)
 {
     if (quantity > 0)
     {
         if (size == newSize)
         {
             ChangeQuantity(cart, shipmentId, code, quantity);
         }
         else
         {
             var newCode = _productService.GetSiblingVariantCodeBySize(code, newSize);
             UpdateLineItemSku(cart, shipmentId, code, newCode, quantity, displayName);
         }
     }
     else
     {
         RemoveLineItem(cart, shipmentId, code);
     }
 }
示例#14
0
        public void WhenSkuIsNotInPricelistThenAddRaisesException()
        {
            var testContext = new TestContext();

            ICart cart = testContext.CartFactory.Create();

            decimal registeredSkuPrice = 100;
            var     registeredSku      = testContext.CreateNewSku("A", registeredSkuPrice);

            cart.Add(registeredSku);
            Assert.Equal(registeredSkuPrice, cart.Total);

            var unregisteredSku = new Sku("U");

            Assert.Throws <StandardCart.SkuNotFoundInPriceListException>(() =>
            {
                cart.Add(unregisteredSku); // Adding SKU but no price registered in pricelist
            });
        }
        public virtual WishListViewModel CreateWishListViewModel(ICart cart)
        {
            if (cart == null)
            {
                return(new WishListViewModel
                {
                    ItemCount = 0,
                    CartItems = new CartItemViewModel[0],
                    Total = new Money(0, _currencyService.GetCurrentCurrency())
                });
            }

            return(new WishListViewModel
            {
                ItemCount = GetLineItemsTotalQuantity(cart),
                CartItems = _shipmentViewModelFactory.CreateShipmentsViewModel(cart).SelectMany(x => x.CartItems),
                Total = _orderGroupCalculator.GetSubTotal(cart)
            });
        }
示例#16
0
        public virtual WishListViewModel CreateWishListViewModel(ICart cart)
        {
            if (cart == null)
            {
                return(new WishListViewModel
                {
                    ItemCount = 0,
                    CartItems = new CartItemViewModel[0],
                    Total = _pricingService.GetMoney(0)
                });
            }

            return(new WishListViewModel
            {
                ItemCount = GetCartLineItems(cart).Count(),
                CartItems = _shipmentViewModelFactory.CreateShipmentsViewModel(cart).SelectMany(x => x.CartItems),
                Total = _orderGroupCalculator.GetSubTotal(cart)
            });
        }
        public ActionResult Reorder(int orderGroupId = 0)
        {
            var purchaseOrder = OrderContext.Current.GetPurchaseOrderById(orderGroupId);
            var form          = purchaseOrder.GetFirstForm();
            var list          = form.GetAllLineItems();

            string warningMessage = string.Empty;

            ICart Cart = _cartService.LoadOrCreateCart(_cartService.DefaultCartName);

            foreach (var item in list)
            {
                Cart.AddLineItem(item);
            }

            var order = _orderRepository.Save(Cart);

            return(Json(new { result = true }));
        }
示例#18
0
        private static void EnsureShipping(ICart cart, DetailsResponse details)
        {
            var shipment = cart.GetFirstShipment();

            if (shipment.ShippingMethodId == default(Guid))
            {
                if (details?.ShippingDetails?.ShippingMethodId != null)
                {
                    shipment.ShippingMethodId = new Guid(details.ShippingDetails.ShippingMethodId);
                }
            }

            if (shipment.ShippingAddress == null)
            {
                shipment.ShippingAddress =
                    AddressHelper.UserDetailsAndShippingDetailsToOrderAddress(details?.UserDetails,
                                                                              details?.ShippingDetails, cart);
            }
        }
示例#19
0
 public void ChangeCartItem(ICart cart, int shipmentId, string code, decimal quantity, string size, string newSize)
 {
     if (quantity > 0)
     {
         if (size == newSize)
         {
             ChangeQuantity(cart, shipmentId, code, quantity);
         }
         else
         {
             var newCode = _productService.GetSiblingVariantCodeBySize(code, newSize);
             UpdateLineItemSku(cart, shipmentId, code, newCode, quantity);
         }
     }
     else
     {
         RemoveLineItem(cart, shipmentId, code);
     }
 }
示例#20
0
        private void RemoveLineItem(ICart cart, int shipmentId, string code)
        {
            //gets  the shipment for shipment id or for wish list shipment id as a parameter is always equal zero( wish list).
            var shipment = cart.GetFirstForm().Shipments.First(s => s.ShipmentId == shipmentId || shipmentId == 0);

            var lineItem = shipment.LineItems.FirstOrDefault(l => l.Code == code);

            if (lineItem != null)
            {
                shipment.LineItems.Remove(lineItem);
            }

            if (!shipment.LineItems.Any())
            {
                cart.GetFirstForm().Shipments.Remove(shipment);
            }

            ValidateCart(cart);
        }
示例#21
0
        /// <summary>
        /// Prints the cart for invoicing purposes.
        /// </summary>
        /// <param name="cart">The <see cref="ICart"/> to print.</param>
        /// <returns>A <see cref="string"/>.</returns>
        public static string PrintCart(this ICart cart)
        {
            string n      = Environment.NewLine;
            string nn     = $"{n}{n}";
            string output = string.Empty;

            output += $"Cart info ({cart.Quantity} SKU){n}";
            output += $"==={nn}";

            foreach (var item in cart)
            {
                output += $"- {item.ToString()} => {item.Price}{n}";
            }

            output += $"---{n}";
            output += $"Total: {cart.Total}{n}";

            return(output);
        }
示例#22
0
        public OrderViewModel(IUnitOfWork unitOfWork, ICart cart)
        {
            this.unitOfWork = unitOfWork;
            cartItems       = cart.GetCartItems();
            var products = unitOfWork.Repository <Product>().Query().AsNoTracking().Where(p => cartItems.Any(c => c.ProductId == p.Id)).ToList();

            Items = new List <OrderItem>();
            foreach (var cartItem in cartItems)
            {
                var product = products.FirstOrDefault(p => p.Id == cartItem.ProductId);
                Items.Add(new OrderItem()
                {
                    Id          = product.Id,
                    ProductName = product.Name,
                    Description = product.Description,
                    Count       = cartItem.Count
                });
            }
        }
示例#23
0
        public CheckoutOrderData UpdateOrder(string orderId, ICart cart)
        {
            var client                = GetClient(cart.Market);
            var checkout              = client.NewCheckoutOrder(orderId);
            var orderData             = GetCheckoutOrderData(cart, PaymentMethodDto);
            var checkoutConfiguration = GetCheckoutConfiguration(cart.Market);

            try
            {
                if (ServiceLocator.Current.TryGetExistingInstance(out ICheckoutOrderDataBuilder checkoutOrderDataBuilder))
                {
                    checkoutOrderDataBuilder.Build(orderData, cart, checkoutConfiguration);
                }
                orderData = checkout.Update(orderData);

                cart = UpdateCartWithOrderData(cart, orderData);

                return(orderData);
            }
            catch (ApiException ex)
            {
                // Create new session if current one is not found
                if (ex.StatusCode == HttpStatusCode.NotFound)
                {
                    return(CreateOrder(cart));
                }

                _logger.Error($"{ex.ErrorMessage.CorrelationId} {ex.ErrorMessage.ErrorCode} {string.Join(", ", ex.ErrorMessage.ErrorMessages)}", ex);

                throw;
            }
            catch (WebException ex)
            {
                if ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound)
                {
                    return(CreateOrder(cart));
                }

                _logger.Error(ex.Message, ex);

                throw;
            }
        }
示例#24
0
        public ActionResult Reorder(int orderGroupId = 0)
        {
            var purchaseOrder = OrderContext.Current.Get <PurchaseOrder>(orderGroupId);
            var form          = purchaseOrder.GetFirstForm();
            var list          = form.GetAllLineItems();

            string warningMessage = string.Empty;

            ICart Cart = _cartService.LoadOrCreateCart(_cartService.DefaultCartName);

            foreach (var item in list)
            {
                Cart.AddLineItem(item);
            }

            var order = _orderRepository.Save(Cart);

            return(Redirect(Url.ContentUrl(_contentLoader.Get <CommerceHomePage>(ContentReference.StartPage).CheckoutPage)));
        }
        public Dictionary <ILineItem, IList <ValidationIssue> > ValidateCartItems(ICart cart)
        {
            var validationIssues = new Dictionary <ILineItem, IList <ValidationIssue> >();

            cart.ValidateOrRemoveLineItems(
                (item, issue) => validationIssues.Add(item, new[] { issue }),
                _lineItemValidator);

            cart.UpdatePlacedPriceOrRemoveLineItems(
                _customerContext.GetContactById(cart.CustomerId),
                (item, issue) => validationIssues.Add(item, new[] { issue }),
                _placedPriceProcessor);

            cart.UpdateInventoryOrRemoveLineItems(
                (item, issue) => validationIssues.Add(item, new[] { issue }),
                _inventoryProcessor);

            return(validationIssues);
        }
示例#26
0
        public virtual void CreateAndAddPaymentToCart(ICart cart, CheckoutViewModel viewModel)
        {
            // Clean up payments in cart on payment provider site.
            foreach (var form in cart.Forms)
            {
                form.Payments.Clear();
            }

            var total   = cart.GetTotal(_orderGroupCalculator);
            var payment = viewModel.Payment.CreatePayment(total.Amount, cart);

            if (payment.PaymentMethodName.Equals(Klarna.Payments.Constants.KlarnaPaymentSystemKeyword))
            {
                payment.Properties[Klarna.Payments.Constants.AuthorizationTokenPaymentField] = viewModel.AuthorizationToken;
            }

            cart.AddPayment(payment, _orderGroupFactory);
            payment.BillingAddress = _addressBookService.ConvertToAddress(viewModel.BillingAddress, cart);
        }
        public Dictionary <ILineItem, List <ValidationIssue> > ChangeQuantity(ICart cart, int shipmentId, string code, decimal quantity)
        {
            if (quantity == 0)
            {
                return(RemoveLineItem(cart, shipmentId, code));
            }
            else
            {
                var shipment = cart.GetFirstForm().Shipments.First(s => s.ShipmentId == shipmentId || shipmentId == 0);
                var lineItem = shipment.LineItems.FirstOrDefault(x => x.Code == code);
                if (lineItem == null)
                {
                    throw new InvalidOperationException($"No lineitem with matching code '{code}' for shipment id {shipmentId}");
                }
                cart.UpdateLineItemQuantity(shipment, lineItem, quantity);
            }

            return(ValidateCart(cart));
        }
        public virtual WishListViewModel CreateWishListViewModel(ICart cart)
        {
            if (cart == null)
            {
                return new WishListViewModel
                {
                    ItemCount = 0,
                    CartItems = new CartItemViewModel[0],
                    Total = new Money(0, _currencyService.GetCurrentCurrency())
                };
            }

            return new WishListViewModel
            {
                ItemCount = GetLineItemsTotalQuantity(cart),
                CartItems = _shipmentViewModelFactory.CreateShipmentsViewModel(cart).SelectMany(x => x.CartItems),
                Total = _orderGroupCalculator.GetSubTotal(cart)
            };
        }
示例#29
0
        public ActionResult Import(QuickOrderProductViewModel[] ProductsList)
        {
            var returnedMessages = new List <string>();

            ModelState.Clear();

            if (Cart == null)
            {
                _cart = _cartService.LoadOrCreateCart(_cartService.DefaultCartName);
            }

            foreach (var product in ProductsList)
            {
                if (!product.ProductName.Equals("removed"))
                {
                    var variationReference = _referenceConverter.GetContentLink(product.Sku);
                    var currentQuantity    = GetCurrentItemQuantity(product.Sku);
                    product.Quantity += (int)currentQuantity;
                    var responseMessage = _quickOrderService.ValidateProduct(variationReference, Convert.ToDecimal(product.Quantity), product.Sku);
                    if (responseMessage.IsNullOrEmpty())
                    {
                        var result = _cartService.AddToCart(Cart, product.Sku, 1, "delivery", "");
                        if (!result.EntriesAddedToCart)
                        {
                            continue;
                        }
                        _cartService.ChangeCartItem(Cart, 0, product.Sku, product.Quantity, "", "");
                        _orderRepository.Save(Cart);
                    }
                    else
                    {
                        returnedMessages.Add(responseMessage);
                    }
                }
            }
            if (returnedMessages.Count == 0)
            {
                returnedMessages.Add("All items were added to cart.");
            }
            TempData["messages"] = returnedMessages;

            return(Json(new { Message = returnedMessages, TotalItem = Cart.GetAllLineItems().Sum(x => x.Quantity) }));
        }
        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;
            }
        }
示例#31
0
#pragma warning restore 649

        public static PatchedOrderLine GetOrderLine(this IShipment shipment, ICart cart, OrderGroupTotals totals, bool includeTaxes)
        {
            var total          = AmountHelper.GetAmount(totals.ShippingTotal);
            var totalTaxAmount = 0;
            var taxRate        = 0;

            if (includeTaxes)
            {
                var market           = _marketService.Service.GetMarket(cart.MarketId);
                var shippingTaxTotal = _shippingCalculator.Service.GetShippingTax(shipment, market, cart.Currency);

                if (shippingTaxTotal.Amount > 0)
                {
                    totalTaxAmount = AmountHelper.GetAmount(shippingTaxTotal.Amount);
                    taxRate        = AmountHelper.GetAmount((shippingTaxTotal.Amount / totals.ShippingTotal.Amount) * 100);

                    total = total + totalTaxAmount;
                }
            }

            var shipmentOrderLine = new PatchedOrderLine
            {
                Name           = shipment.ShippingMethodName,
                Quantity       = 1,
                UnitPrice      = total,
                TotalAmount    = total,
                TaxRate        = taxRate,
                TotalTaxAmount = totalTaxAmount,
                Type           = "shipping_fee"
            };

            if (string.IsNullOrEmpty(shipmentOrderLine.Name))
            {
                var shipmentMethod = Mediachase.Commerce.Orders.Managers.ShippingManager.GetShippingMethod(shipment.ShippingMethodId)
                                     .ShippingMethod.FirstOrDefault();
                if (shipmentMethod != null)
                {
                    shipmentOrderLine.Name = shipmentMethod.DisplayName;
                }
            }
            return(shipmentOrderLine);
        }
        public ActionResult Import(ProductViewModel[] ProductsList)
        {
            var returnedMessages = new List <string>();

            ModelState.Clear();

            if (Cart == null)
            {
                _cart = _cartService.LoadOrCreateCart(_cartService.DefaultCartName);
            }

            foreach (var product in ProductsList)
            {
                if (!product.ProductName.Equals("removed"))
                {
                    ContentReference variationReference = _referenceConverter.GetContentLink(product.Sku);
                    var responseMessage = _quickOrderService.ValidateProduct(variationReference, Convert.ToDecimal(product.Quantity), product.Sku);
                    if (responseMessage.IsNullOrEmpty())
                    {
                        string warningMessage;
                        if (_cartService.AddToCart(Cart, product.Sku, out warningMessage))
                        {
                            _cartService.ChangeCartItem(Cart, 0, product.Sku, product.Quantity, "", "");
                            _orderRepository.Save(Cart);
                        }
                    }
                    else
                    {
                        returnedMessages.Add(responseMessage);
                    }
                }
            }
            if (returnedMessages.Count == 0)
            {
                returnedMessages.Add("All items were added to cart.");
            }
            TempData["messages"] = returnedMessages;

            var quickOrderPage = GetQuickOrderPage();

            return(Redirect(quickOrderPage?.LinkURL ?? Request.UrlReferrer.AbsoluteUri));
        }
        public CartViewModelFactoryTests()
        {
            _cart = new FakeCart(new MarketImpl(MarketId.Default), Currency.USD);
            _cart.Forms.Single().Shipments.Single().LineItems.Add(new InMemoryLineItem { Quantity = 1, PlacedPrice = 105, LineItemDiscountAmount = 5});

            _startPage = new StartPage() { CheckoutPage = new ContentReference(1), WishListPage = new ContentReference(1) };
            var contentLoaderMock = new Mock<IContentLoader>();
            contentLoaderMock.Setup(x => x.Get<StartPage>(It.IsAny<ContentReference>())).Returns(_startPage);

            PreferredCultureAccessor accessor = () => CultureInfo.InvariantCulture;
            var shipmentViewModelFactoryMock = new Mock<ShipmentViewModelFactory>(null,null,null,null,null,null,accessor,null);
            _cartItems = new List<CartItemViewModel> {new CartItemViewModel {DiscountedPrice = new Money(100, Currency.USD), Quantity = 1} };
            shipmentViewModelFactoryMock.Setup(x => x.CreateShipmentsViewModel(It.IsAny<ICart>())).Returns(() => new[] { new ShipmentViewModel {CartItems = _cartItems} });

            var currencyServiceMock = new Mock<ICurrencyService>();
            currencyServiceMock.Setup(x => x.GetCurrentCurrency()).Returns(Currency.USD);

            _totals = new OrderGroupTotals(
                new Money(100, Currency.USD),
                new Money(100, Currency.USD),
                new Money(100, Currency.USD),
                new Money(100, Currency.USD),
                new Money(100, Currency.USD),
                new Dictionary<IOrderForm, OrderFormTotals>());

            var orderGroupTotalsCalculatorMock = new Mock<IOrderGroupTotalsCalculator>();
            orderGroupTotalsCalculatorMock.Setup(x => x.GetTotals(It.IsAny<ICart>())).Returns(_totals);

            _orderDiscountTotal = new Money(5, Currency.USD);
            var orderGroupCalculatorMock = new Mock<IOrderGroupCalculator>();
            orderGroupCalculatorMock.Setup(x => x.GetOrderDiscountTotal(It.IsAny<IOrderGroup>(), It.IsAny<Currency>()))
                .Returns(_orderDiscountTotal);

            orderGroupCalculatorMock.Setup(x => x.GetSubTotal(_cart)).Returns(new Money(_cart.GetAllLineItems().Sum(x => x.PlacedPrice * x.Quantity - ((ILineItemDiscountAmount)x).EntryAmount), _cart.Currency));

            _subject = new CartViewModelFactory(
                contentLoaderMock.Object,
                currencyServiceMock.Object,
                orderGroupTotalsCalculatorMock.Object,
                orderGroupCalculatorMock.Object,
                shipmentViewModelFactoryMock.Object);
        }
        public ActionResult Index(ICart cart)
        {
            var orderItems      = cart.GetOrderItems();
            var orderItemVMList = new List <OrderItemVM>();

            foreach (var orderItemDTO in orderItems)
            {
                OrderItemVM buff = new OrderItemVM();
                buff.PurposeId = orderItemDTO.PurposeId;
                buff.ItemId    = orderItemDTO.ItemId;
                buff.BrandName = orderItemDTO.BrandName;
                buff.ItemName  = orderItemDTO.ItemName;
                buff.IsPromo   = orderItemDTO.IsPromo;
                buff.Count     = orderItemDTO.Count;
                buff.Price     = orderItemDTO.Price;
                buff.Currency  = orderItemDTO.Currency;
                orderItemVMList.Add(buff);
            }
            return(View(orderItemVMList));
        }
 public virtual MiniCartViewModel CreateMiniCartViewModel(ICart cart)
 {
     if (cart == null)
     {
         return new MiniCartViewModel
         {
             ItemCount = 0,
             CheckoutPage = _contentLoader.Get<StartPage>(ContentReference.StartPage).CheckoutPage,
             Shipments = Enumerable.Empty<ShipmentViewModel>(),
             Total = new Money(0, _currencyService.GetCurrentCurrency())
         };
     }
     return new MiniCartViewModel
     {
         ItemCount = GetLineItemsTotalQuantity(cart),
         CheckoutPage = _contentLoader.Get<StartPage>(ContentReference.StartPage).CheckoutPage,
         Shipments = _shipmentViewModelFactory.CreateShipmentsViewModel(cart),
         Total = _orderGroupCalculator.GetSubTotal(cart)
     };
 }
        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);
        }
示例#37
0
 private PatchedMerchantUrls GetMerchantUrls(ICart cart)
 {
     if (PaymentMethodDto != null)
     {
         var configuration = GetConfiguration(cart.Market);
         return(new PatchedMerchantUrls
         {
             Terms = new Uri(configuration.TermsUrl.Replace("{orderGroupId}", cart.OrderLink.OrderGroupId.ToString())),
             CancellationTerms = !string.IsNullOrEmpty(configuration.CancellationTermsUrl) ? new Uri(configuration.CancellationTermsUrl.Replace("{orderGroupId}", cart.OrderLink.OrderGroupId.ToString())) : null,
             Checkout = new Uri(configuration.CheckoutUrl.Replace("{orderGroupId}", cart.OrderLink.OrderGroupId.ToString())),
             Confirmation = new Uri(configuration.ConfirmationUrl.Replace("{orderGroupId}", cart.OrderLink.OrderGroupId.ToString())),
             Push = new Uri(configuration.PushUrl.Replace("{orderGroupId}", cart.OrderLink.OrderGroupId.ToString())),
             AddressUpdate = new Uri(configuration.AddressUpdateUrl.Replace("{orderGroupId}", cart.OrderLink.OrderGroupId.ToString())),
             ShippingOptionUpdate = new Uri(configuration.ShippingOptionUpdateUrl.Replace("{orderGroupId}", cart.OrderLink.OrderGroupId.ToString())),
             Notification = new Uri(configuration.NotificationUrl.Replace("{orderGroupId}", cart.OrderLink.OrderGroupId.ToString())),
             Validation = new Uri(configuration.OrderValidationUrl.Replace("{orderGroupId}", cart.OrderLink.OrderGroupId.ToString()))
         });
     }
     return(null);
 }
        public bool AddCouponCode(ICart cart, string couponCode)
        {
            var couponCodes = cart.GetFirstForm().CouponCodes;

            if (couponCodes.Any(c => c.Equals(couponCode, StringComparison.OrdinalIgnoreCase)))
            {
                return(false);
            }
            couponCodes.Add(couponCode);
            var rewardDescriptions = cart.ApplyDiscounts(_promotionEngine, new PromotionEngineSettings());
            var appliedCoupons     = rewardDescriptions.Where(r => r.Status == FulfillmentStatus.Fulfilled && !string.IsNullOrEmpty(r.Promotion.Coupon.Code))
                                     .Select(c => c.Promotion.Coupon.Code);
            var couponApplied = appliedCoupons.Any(c => c.Equals(couponCode, StringComparison.OrdinalIgnoreCase));

            if (!couponApplied)
            {
                couponCodes.Remove(couponCode);
            }
            return(couponApplied);
        }
示例#39
0
 public ITaxResult CalculateTaxFromCartItems(ICart CartObj, IAddress AddressObj, IUserProfile UserProfile)
 {
     try
     {
         ISecurity Security = new Security(UserProfile);
         if (Security.AuthenticateUser() == true)
         {
             double  PreTaxAmount    = CalculateCartPrice(CartObj);
             DataSet TaxResultFromDB = new TaxManagementDataLayer().GetTaxDetailsFromDB(AddressObj.GetAddressID());
             double  FinalAmount     = PreTaxAmount + CalculateCartTax(PreTaxAmount, TaxResultFromDB);
             return(new TaxResult(true, TaxResultFromDB.Tables[0].Rows[0]["tax_type"].ToString(), double.Parse(TaxResultFromDB.Tables[0].Rows[0]["tax"].ToString()), CalculateCartTax(PreTaxAmount, TaxResultFromDB), FinalAmount, PreTaxAmount));
         }
         return(new TaxResult(false));
     }
     catch (Exception ex)
     {
         Logger.Instance().Log(Fatal.Instance(), ex);
         throw ex;
     }
 }
示例#40
0
        public void TidyUpShipments(ICart cart)
        {
            // only first form now, change this... like for Payments
            Dictionary <int, IShipment> _shippingDict = new Dictionary <int, IShipment>();

            foreach (var item in cart.GetFirstForm().Shipments)//ch.Cart.OrderAddresses)
            {
                // auto-added shipment should remain in the cart
                if (item.ShippingMethodId != new Guid()) // ...pick those "other shipments", reset done above
                {
                    // cannot remove in here, adding to Dict for later remove
                    _shippingDict.Add(item.ShipmentId, item);
                }
            }

            foreach (var item in _shippingDict.Values)
            {
                cart.GetFirstForm().Shipments.Remove(item);
            }
        }
示例#41
0
        // Generic one
        public bool CheckOnLineItems(ICart cart)
        {
            // need to set it to something
            var lineItems = cart.GetAllLineItems();

            //bool theBool = false;
            foreach (var item in lineItems)
            {
                if ((bool)item.Properties["LineItemSpecialShipping"] == true)
                {
                    cart.Properties["SpecialShip"] = true;
                }
                else
                {
                    cart.Properties["SpecialShip"] = false;
                }
            }

            return((bool)cart.Properties["SpecialShip"]);
        }
        private static void EnsureShipping(ICart cart, IVippsUserDetails details)
        {
            var shipment = cart.GetFirstShipment();

            if (details?.ShippingDetails?.ShippingMethodId != null &&
                (shipment.ShippingMethodId == default(Guid) || shipment.ShippingMethodId.ToString() != details.ShippingDetails.ShippingMethodId))
            {
                if (details?.ShippingDetails?.ShippingMethodId != null)
                {
                    shipment.ShippingMethodId = new Guid(details.ShippingDetails.ShippingMethodId);
                }
            }

            if (details?.ShippingDetails != null && details.UserDetails != null)
            {
                shipment.ShippingAddress =
                    AddressHelper.UserDetailsAndShippingDetailsToOrderAddress(details.UserDetails,
                                                                              details.ShippingDetails, cart);
            }
        }
示例#43
0
        public bool AddCouponCode(ICart cart, string couponCode)
        {
            var couponCodes = cart.GetFirstForm().CouponCodes;
            if (couponCodes.Any(c => c.Equals(couponCode, StringComparison.OrdinalIgnoreCase)))
            {
                return false;
            }
            couponCodes.Add(couponCode);
            var rewardDescriptions = ApplyDiscounts(cart);
            var appliedCoupons = rewardDescriptions
                .Where(r => r.AppliedCoupon != null)
                .Select(r => r.AppliedCoupon);

            var couponApplied = appliedCoupons.Any(c => c.Equals(couponCode, StringComparison.OrdinalIgnoreCase));
            if (!couponApplied)
            {
                couponCodes.Remove(couponCode);
            }
            return couponApplied;
        }
 public virtual MiniCartViewModel CreateMiniCartViewModel(ICart cart)
 {
     if (cart == null)
     {
         return(new MiniCartViewModel
         {
             ItemCount = 0,
             CheckoutPage = _contentLoader.Get <StartPage>(ContentReference.StartPage).CheckoutPage,
             Shipments = Enumerable.Empty <ShipmentViewModel>(),
             Total = new Money(0, _currencyService.GetCurrentCurrency())
         });
     }
     return(new MiniCartViewModel
     {
         ItemCount = GetLineItemsTotalQuantity(cart),
         CheckoutPage = _contentLoader.Get <StartPage>(ContentReference.StartPage).CheckoutPage,
         Shipments = _shipmentViewModelFactory.CreateShipmentsViewModel(cart),
         Total = _orderGroupCalculator.GetSubTotal(cart) + _orderGroupCalculator.GetOrderDiscountTotal(cart, cart.Currency)
     });
 }
        public virtual LargeCartViewModel CreateLargeCartViewModel(ICart cart)
        {
            if (cart == null)
            {
                var zeroAmount = new Money(0, _currencyService.GetCurrentCurrency());

                return new LargeCartViewModel
                {
                    Shipments = Enumerable.Empty<ShipmentViewModel>(),
                    TotalDiscount = zeroAmount,
                    Total = zeroAmount
                };
            }

            return new LargeCartViewModel
            {
               Shipments = _shipmentViewModelFactory.CreateShipmentsViewModel(cart),
               TotalDiscount = new Money(cart.GetAllLineItems().Sum(x => x.GetEntryDiscount()), cart.Currency),
               Total = _orderGroupCalculator.GetSubTotal(cart)
            };
        }
        public virtual CartItemViewModel CreateCartItemViewModel(ICart cart, ILineItem lineItem, VariationContent variant)
        {
            var productLink = variant.GetParentProducts(_relationRepository).FirstOrDefault();
            var product = _contentLoader.Get<ProductContent>(productLink) as FashionProduct;

            return new CartItemViewModel
            {
                Code = lineItem.Code,
                DisplayName = variant.DisplayName,
                ImageUrl = variant.GetAssets<IContentImage>(_contentLoader, _urlResolver).FirstOrDefault() ?? "",
                DiscountedPrice = GetDiscountedPrice(cart, lineItem),
                PlacedPrice = new Money(lineItem.PlacedPrice, _currencyService.GetCurrentCurrency()),
                Quantity = lineItem.Quantity,
                Url = lineItem.GetUrl(),
                Variant = variant,
                IsAvailable = _pricingService.GetCurrentPrice(variant.Code).HasValue,
                Brand = GetBrand(product),
                AvailableSizes = GetAvailableSizes(product, variant),
                DiscountedUnitPrice = GetDiscountedUnitPrice(cart, lineItem),
                IsGift = lineItem.IsGift
            };
        }
示例#47
0
        public ActionResult AddToCart(string code)
        {
            string warningMessage = string.Empty;

            ModelState.Clear();

            if (Cart == null)
            {
                _cart = _cartService.LoadOrCreateCart(_cartService.DefaultCartName);
            }

            if (_cartService.AddToCart(Cart, code, out warningMessage))
            {
                _orderRepository.Save(Cart);
                return MiniCartDetails();
            }

            // HttpStatusMessage can't be longer than 512 characters.
            warningMessage = warningMessage.Length < 512 ? warningMessage : warningMessage.Substring(512);

            return new HttpStatusCodeResult(500, warningMessage);
        }
 public PriceCalculator(ICart cart)
 {
     this.cart = cart;
 }
        public CheckoutViewModelFactoryTests()
        {
            _cart = new FakeCart(new MarketImpl(new MarketId(Currency.USD)), Currency.USD);
            _cart.Forms.Single().Shipments.Single().LineItems.Add(new InMemoryLineItem());
            _cart.Forms.Single().CouponCodes.Add("couponcode");

            _cashPayment = new PaymentMethodViewModel<PaymentMethodBase> { SystemName = cashPaymentName };
            _creditPayment = new PaymentMethodViewModel<PaymentMethodBase> { SystemName = creditPaymentName };
            var paymentServiceMock = new Mock<IPaymentService>();
            var marketMock = new Mock<IMarket>();
            var currentMarketMock = new Mock<ICurrentMarket>();
            var languageServiceMock = new Mock<LanguageService>(null, null, null, null);
            var paymentMethodViewModelFactory = new PaymentMethodViewModelFactory(currentMarketMock.Object, languageServiceMock.Object, paymentServiceMock.Object);

            currentMarketMock.Setup(x => x.GetCurrentMarket()).Returns(marketMock.Object);
            languageServiceMock.Setup(x => x.GetCurrentLanguage()).Returns(new CultureInfo("en-US"));
            paymentServiceMock.Setup(x => x.GetPaymentMethodsByMarketIdAndLanguageCode(It.IsAny<string>(), "en")).Returns(
               new[]
               {
                    new PaymentMethodModel { Description = "Lorem ipsum", FriendlyName = "payment method 1", LanguageId = "en", PaymentMethodId = Guid.NewGuid(), SystemName = cashPaymentName },
                    new PaymentMethodModel { Description = "Lorem ipsum", FriendlyName = "payment method 2", LanguageId = "en", PaymentMethodId = Guid.NewGuid(), SystemName = creditPaymentName }
               });

            var addressBookServiceMock = new Mock<IAddressBookService>();
            addressBookServiceMock.Setup(x => x.List()).Returns(() => new List<AddressModel> { new AddressModel { AddressId = "addressid" } });
            _preferredBillingAddress = CustomerAddress.CreateInstance();
            _preferredBillingAddress.Name = "preferredBillingAddress";
            addressBookServiceMock.Setup(x => x.GetPreferredBillingAddress()).Returns(_preferredBillingAddress);
            addressBookServiceMock.Setup(x => x.UseBillingAddressForShipment()).Returns(true);

            _startPage = new StartPage();
            var contentLoaderMock = new Mock<IContentLoader>();
            contentLoaderMock.Setup(x => x.Get<StartPage>(It.IsAny<PageReference>())).Returns(_startPage);

            var orderFactoryMock = new Mock<IOrderFactory>();
            var urlResolverMock = new Mock<UrlResolver>();
            var httpcontextMock = new Mock<HttpContextBase>();
            var requestMock = new Mock<HttpRequestBase>();

            requestMock.Setup(x => x.Url).Returns(new Uri("http://site.com"));
            requestMock.Setup(x => x.UrlReferrer).Returns(new Uri("http://site.com"));
            httpcontextMock.Setup(x => x.Request).Returns(requestMock.Object);

            Func<CultureInfo> func = () => CultureInfo.InvariantCulture;
            var shipmentViewModelFactoryMock = new Mock<ShipmentViewModelFactory>(null, null, null, null, null, null, func, null);
            shipmentViewModelFactoryMock.Setup(x => x.CreateShipmentsViewModel(It.IsAny<ICart>())).Returns(() => new[]
            {
                new ShipmentViewModel {
                    CartItems = new[]
                    {
                        new CartItemViewModel { Quantity = 1 }
                    }
                }
            });

            _subject = new CheckoutViewModelFactory(
                new MemoryLocalizationService(),
                paymentMethodViewModelFactory,
                addressBookServiceMock.Object,
                contentLoaderMock.Object,
                orderFactoryMock.Object,
                urlResolverMock.Object,
                (() => httpcontextMock.Object),
                shipmentViewModelFactoryMock.Object);
        }
 public void SetUp()
 {
     cart = A.Fake<ICart>();
     calculator = new PriceCalculator(cart);
 }
示例#51
0
        private void ChangeQuantity(ICart cart, int shipmentId, string code, decimal quantity)
        {
            if (quantity == 0)
            {
                RemoveLineItem(cart, shipmentId, code);
            }
            var shipment = cart.GetFirstForm().Shipments.First(s => s.ShipmentId == shipmentId || shipmentId <= 0);
            var lineItem = shipment.LineItems.FirstOrDefault(x => x.Code == code);
            if (lineItem == null)
            {
                return;
            }

            cart.UpdateLineItemQuantity(shipment, lineItem, quantity);
            ValidateCart(cart);
        }
示例#52
0
        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.IsGift })
                .Select(x => new
                {
                    Code = x.Key.Code,
                    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)
            {
                IShipment shipment = _orderFactory.CreateShipment();
                form.Shipments.Add(shipment);
                shipment.ShippingAddress = _addressBookService.ConvertToAddress(address);

                foreach (var item in items.Where(x => x.AddressId == address.AddressId))
                {
                    var lineItem = _orderFactory.CreateLineItem(item.Code);
                    lineItem.IsGift = item.IsGift;
                    lineItem.Quantity = item.Quantity;
                    shipment.LineItems.Add(lineItem);
                }
            }

            ValidateCart(cart);
        }
示例#53
0
        public CartServiceTests()
        {
            _addressBookServiceMock = new Mock<IAddressBookService>();
            _customerContextFacaceMock = new Mock<CustomerContextFacade>();
            _inventoryProcessorMock = new Mock<IInventoryProcessor>();
            _lineItemValidatorMock = new Mock<ILineItemValidator>();
            _orderFactoryMock = new Mock<IOrderFactory>();
            _orderRepositoryMock = new Mock<IOrderRepository>();
            _placedPriceProcessorMock = new Mock<IPlacedPriceProcessor>();
            _pricingServiceMock = new Mock<IPricingService>();
            _productServiceMock = new Mock<IProductService>();
            _productServiceMock = new Mock<IProductService>();
            _promotionEngineMock = new Mock<IPromotionEngine>();
            _marketMock = new Mock<IMarket>();
            _currentMarketMock = new Mock<ICurrentMarket>();
            _currencyServiceMock = new Mock<ICurrencyService>();
            _subject = new CartService(_productServiceMock.Object, _pricingServiceMock.Object, _orderFactoryMock.Object, _customerContextFacaceMock.Object, _placedPriceProcessorMock.Object,
                _inventoryProcessorMock.Object, _lineItemValidatorMock.Object, _orderRepositoryMock.Object, _promotionEngineMock.Object, _addressBookServiceMock.Object, _currentMarketMock.Object, _currencyServiceMock.Object);
            _cart = new FakeCart(new Mock<IMarket>().Object, new Currency("USD")) { Name = _subject.DefaultCartName };

            _orderRepositoryMock.Setup(x => x.Load<ICart>(It.IsAny<Guid>(), _subject.DefaultCartName)).Returns(new[] { _cart });
            _orderRepositoryMock.Setup(x => x.Create<ICart>(It.IsAny<Guid>(), _subject.DefaultCartName)).Returns(_cart);
            _orderFactoryMock.Setup(x => x.CreateLineItem(It.IsAny<string>())).Returns((string code) => new InMemoryLineItem() { Code = code });
            _orderFactoryMock.Setup(x => x.CreateShipment()).Returns(() => new InMemoryShipment());
            _currentMarketMock.Setup(x => x.GetCurrentMarket()).Returns(_marketMock.Object);
            _lineItemValidatorMock.Setup(x => x.Validate(It.IsAny<ILineItem>(), It.IsAny<IMarket>(), It.IsAny<Action<ILineItem, ValidationIssue>>())).Returns(true);
            _placedPriceProcessorMock.Setup(x => x.UpdatePlacedPrice(It.IsAny<ILineItem>(), It.IsAny<CustomerContact>(), It.IsAny<IMarket>(), _cart.Currency, It.IsAny<Action<ILineItem, ValidationIssue>>())).Returns(true);
        }
示例#54
0
 public PatientService(ICart cart)
 {
     _cart = cart;
 }
示例#55
0
 public AccountController(ICart svc)
 {
     _cartService = svc;
 }
 private Money? GetDiscountedPrice(ICart cart, ILineItem lineItem)
 {
     var marketId = _currentMarket.GetCurrentMarket().MarketId;
     var currency = _currencyService.GetCurrentCurrency();
     if (cart.Name.Equals(_cartService.DefaultWishListName)) 
     {
         var discountedPrice = _promotionService.GetDiscountPrice(new CatalogKey(_appContext.ApplicationId, lineItem.Code), marketId, currency);
         return discountedPrice != null ? discountedPrice.UnitPrice : (Money?)null;
     }
     return lineItem.GetDiscountedPrice(cart.Currency, _lineItemCalculator);
 }
 private Money? GetDiscountedUnitPrice(ICart cart, ILineItem lineItem)
 {
     var discountedPrice = GetDiscountedPrice(cart, lineItem) / lineItem.Quantity;
     return discountedPrice.GetValueOrDefault().Amount < lineItem.PlacedPrice ? discountedPrice : null;
 }
 private decimal GetLineItemsTotalQuantity(ICart cart)
 {
     return cart.GetAllLineItems().Sum(x => x.Quantity);
 }
示例#59
0
 /// <summary>
 /// Update
 /// </summary>
 public async Task<int> UpdateAsync(ICart cart)
 {
     return await repository.UpdateAsync(cart);
 }
示例#60
0
        /// <summary>
        /// NOTE: Deletes previous cart, adds new one
        /// </summary>
        /// <param name="cart">Cart item</param>
        /// <param name="deleteOldEntries">If delete, deletes old entries</param>
        /// <returns>Saves cart item</returns>
        public async Task<ICart> UpdateCartAsync(ICart cart, bool deletePreviousCart)
        {
            try
            {
                
                IUnitOfWork uow = repository.CreateUnitOfWork();
                Task<CartEntity> result = null;

                if (deletePreviousCart)
                {
                    int deleted = await uow.DeleteAsync<CartEntity>(c => c.GamesInCart == cart.GamesInCart);
                 //   if(deleted != 0)
                     //   result = uow.AddAsync<CartEntity>(AutoMapper.Mapper.Map<CartEntity>(cart));
                }
                else
                {
                    result = uow.UpdateWithAddAsync<CartEntity>(AutoMapper.Mapper.Map<CartEntity>(cart));
                }
  
                await uow.CommitAsync();
                ICart entity = Mapper.Map<ICart>(result.Result);
                return entity;

            }
            catch (Exception ex)
            {
                
                throw ex;
            }
        }