Ejemplo n.º 1
0
        public virtual IEnumerable <ShipmentViewModel> CreateShipmentsViewModel(ICart cart)
        {
            var preferredCulture = _languageResolver.GetPreferredCulture();

            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.MarketId, cart.Currency, shipment)
                };

                var currentShippingMethod = shipmentModel.ShippingMethods.FirstOrDefault();
                if (shipment.ShippingMethodId != Guid.Empty)
                {
                    currentShippingMethod = shipmentModel.ShippingMethods.FirstOrDefault(x => x.Id == shipment.ShippingMethodId);
                }
                else
                {
                    currentShippingMethod = shipmentModel.ShippingMethods.FirstOrDefault();
                }

                shipmentModel.ShippingMethodId           = currentShippingMethod?.Id ?? shipment.ShippingMethodId;
                shipmentModel.CurrentShippingMethodName  = currentShippingMethod?.DisplayName ?? "In store pickup";
                shipmentModel.CurrentShippingMethodPrice = currentShippingMethod?.Price ?? new Money(0, cart.Currency);
                shipmentModel.WarehouseCode = shipment.WarehouseCode;

                var entries = _contentLoader.GetItems(shipment.LineItems.Select(x => _referenceConverter.GetContentLink(x.Code)),
                                                      preferredCulture).OfType <EntryContentBase>();

                foreach (var lineItem in shipment.LineItems)
                {
                    var entry = entries.FirstOrDefault(x => x.Code == lineItem.Code);
                    if (entry == null)
                    {
                        //Entry was deleted, skip processing.
                        continue;
                    }

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

                yield return(shipmentModel);
            }
        }
        public async Task <ActionResult> ChangeCartItem(RequestParamsToCart param) // change quantity
        {
            ModelState.Clear();

            var validationIssues = _cartService.ChangeCartItem(CartWithValidationIssues.Cart, param.ShipmentId, param.Code, param.Quantity, param.Size, param.NewSize);

            _orderRepository.Save(CartWithValidationIssues.Cart);
            var model = _cartViewModelFactory.CreateLargeCartViewModel(CartWithValidationIssues.Cart, null);

            if (validationIssues.Any())
            {
                foreach (var item in validationIssues.Keys)
                {
                    model.Message += GetValidationMessages(item, validationIssues);
                }
            }
            var trackingResponse = await _recommendationService.TrackCart(HttpContext, CartWithValidationIssues.Cart);

            //model.Recommendations = trackingResponse.GetCartRecommendations(_referenceConverter);
            var viewModel = _cartViewModelFactory.CreateLargeCartViewModel(CartWithValidationIssues.Cart, null);

            if (param.RequestFrom == "changeSizeItem")
            {
                var preferredCulture = _languageResolver.GetPreferredCulture();
                var newCode          = _productService.GetSiblingVariantCodeBySize(param.Code, param.NewSize);
                var shipment         = CartWithValidationIssues.Cart.GetFirstForm().Shipments.FirstOrDefault(x => x.ShipmentId == param.ShipmentId);
                var lineItem         = shipment.LineItems.FirstOrDefault(x => x.Code == newCode);
                var entries          = _contentLoader.GetItems(shipment.LineItems.Select(x => _referenceConverter.GetContentLink(x.Code)),
                                                               preferredCulture).OfType <EntryContentBase>();
                var entry            = entries.FirstOrDefault(x => x.Code == lineItem.Code);
                var newItemViewModel = _cartItemViewModelFactory.CreateCartItemViewModel(CartWithValidationIssues.Cart, lineItem, entry);
                ViewData["ShipmentId"] = param.ShipmentId;
                return(PartialView("_ItemTemplate", newItemViewModel));
            }

            var productName = "";
            var entryLink   = _referenceConverter.GetContentLink(param.Code);

            productName = _contentLoader.Get <EntryContentBase>(entryLink).DisplayName;

            var result = new ChangeCartJsonResult
            {
                CountItems    = (int)CartWithValidationIssues.Cart.GetAllLineItems().Sum(x => x.Quantity),
                SubTotal      = viewModel.Subtotal,
                Total         = viewModel.Total,
                ShippingTotal = viewModel.ShippingTotal,
                TaxTotal      = viewModel.TaxTotal,
                TotalDiscount = viewModel.TotalDiscount
            };

            if (validationIssues.Count > 0)
            {
                result.StatusCode = 0;
                result.Message    = string.Join("\n", validationIssues.Select(x => string.Join("\n", x.Value.Select(v => v.ToString()))));
            }
            else
            {
                result.StatusCode = 1;
                result.Message    = productName + " has changed from the cart.";
            }

            return(Json(result));
        }