コード例 #1
0
        public IHttpActionResult UpdateLineItem([FromBody] UpdateLineItemRequest request)
        {
            TransactionLibrary.UpdateLineItem(request.OrderLineId, request.NewQuantity);
            TransactionLibrary.ExecuteBasketPipeline();

            var orderLine = TransactionLibrary.GetBasket().PurchaseOrder.OrderLines.First(l => l.OrderLineId == request.OrderLineId);

            var currency  = SiteContext.Current.CatalogContext.CurrentCatalog.PriceGroup.Currency;
            var lineTotal = new Money(orderLine.Total.GetValueOrDefault(), currency);

            var updatedLine = new LineItem()
            {
                OrderLineId    = orderLine.OrderLineId,
                Quantity       = orderLine.Quantity,
                Sku            = orderLine.Sku,
                VariantSku     = orderLine.VariantSku,
                Price          = orderLine.Price,
                ProductName    = orderLine.ProductName,
                Total          = orderLine.Total,
                FormattedTotal = lineTotal.ToString(),
                UnitDiscount   = orderLine.UnitDiscount,
                VAT            = orderLine.VAT,
                VATRate        = orderLine.VATRate
            };

            return(Json(updatedLine));
        }
コード例 #2
0
        /// <summary>
        /// Update a lineItem in the cart
        /// </summary>
        /// <param name="param"></param>
        /// <returns>The full and updated cart details</returns>
        public virtual Task <ProcessedCart> UpdateLineItemAsync(UpdateLineItemParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.ScopeId))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.ScopeId)), nameof(param));
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.CultureInfo)), nameof(param));
            }
            if (string.IsNullOrWhiteSpace(param.CartName))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.CartName)), nameof(param));
            }
            if (param.LineItemId == Guid.Empty)
            {
                throw new ArgumentException(GetMessageOfEmpty(nameof(param.LineItemId)), nameof(param));
            }
            if (param.CustomerId == Guid.Empty)
            {
                throw new ArgumentException(GetMessageOfEmpty(nameof(param.CustomerId)), nameof(param));
            }
            if (param.Quantity < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(param), param.Quantity, GetMessageOfZeroNegative(nameof(param.Quantity)));
            }

            var request = new UpdateLineItemRequest
            {
                CartName    = param.CartName,
                CultureName = param.CultureInfo.Name,
                CartType    = param.CartType,
                CustomerId  = param.CustomerId,
                GiftMessage = param.GiftMessage,
                GiftWrap    = param.GiftWrap,
                Id          = param.LineItemId,
                PropertyBag = param.PropertyBag,
                Quantity    = param.Quantity,
                ScopeId     = param.ScopeId,
                RecurringOrderFrequencyName = param.RecurringOrderFrequencyName,
                RecurringOrderProgramName   = param.RecurringOrderProgramName
            };

            var cacheKey = BuildCartCacheKey(param.ScopeId, param.CustomerId, param.CartName);

            return(CacheProvider.ExecuteAndSetAsync(cacheKey, () => OvertureClient.SendAsync(request)));
        }
コード例 #3
0
        /// <summary>
        /// Update a lineItem in the cart
        /// </summary>
        /// <param name="param"></param>
        /// <returns>The full and updated cart details</returns>
        public virtual Task <ProcessedCart> UpdateLineItemAsync(UpdateLineItemParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param", "param is required");
            }
            if (string.IsNullOrWhiteSpace(param.ScopeId))
            {
                throw new ArgumentException("param.ScopeId is required", "param");
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException("param.CultureInfo is required", "param");
            }
            if (string.IsNullOrWhiteSpace(param.CartName))
            {
                throw new ArgumentException("param.CartName is required", "param");
            }
            if (param.LineItemId == Guid.Empty)
            {
                throw new ArgumentException("param.LineItemId is required", "param");
            }
            if (param.CustomerId == Guid.Empty)
            {
                throw new ArgumentException("param.CustomerId is required", "param");
            }
            if (param.Quantity < 1)
            {
                throw new ArgumentException("param.Quantity should be 0 or greater", "param");
            }

            var request = new UpdateLineItemRequest
            {
                CartName    = param.CartName,
                CultureName = param.CultureInfo.Name,
                CustomerId  = param.CustomerId,
                GiftMessage = param.GiftMessage,
                GiftWrap    = param.GiftWrap,
                Id          = param.LineItemId,
                PropertyBag = param.PropertyBag,
                Quantity    = param.Quantity,
                ScopeId     = param.ScopeId,
                RecurringOrderFrequencyName = param.RecurringOrderFrequencyName,
                RecurringOrderProgramName   = param.RecurringOrderProgramName
            };

            var cacheKey = BuildCartCacheKey(param.ScopeId, param.CustomerId, param.CartName);

            return(CacheProvider.ExecuteAndSetAsync(cacheKey, () => OvertureClient.SendAsync(request)));
        }
コード例 #4
0
        public override void Process(ServicePipelineArgs args)
        {
            RemoveCartLinesRequest request;
            CartResult             result;

            CheckParametersAndSetupRequestAndResult(args, out request, out result);

            using (new DisposableThreadLifestyleScope())
            {
                Basket basket = _basketService.GetBasketByCartExternalId(request.Cart.ExternalId);

                if (IsFromUcommerce(request))
                {
                    using (new DisposableThreadLifestyleScope())
                    {
                        result.Cart = MappingLibrary.MapPurchaseOrderToCart(basket.PurchaseOrder);
                        return;
                    }
                }

                var updateLineItemPipeline = ObjectFactory.Instance.Resolve <IPipeline <IPipelineArgs <UpdateLineItemRequest, UpdateLineItemResponse> > >("UpdateLineItem");

                foreach (var cartLine in request.Lines)
                {
                    var updateLineItemRequest = new UpdateLineItemRequest
                    {
                        OrderLine = basket.PurchaseOrder.OrderLines.FirstOrDefault(x => x.OrderLineId == int.Parse(cartLine.ExternalCartLineId)),
                        Quantity  = 0,
                    };
                    updateLineItemRequest.Properties.Add("FromUCommerce", false);

                    var updateLineItemResponse = new UpdateLineItemResponse();
                    updateLineItemPipeline.Execute(new UpdateLineItemPipelineArgs(updateLineItemRequest, updateLineItemResponse));
                }

                var basketPipeline = ObjectFactory.Instance.Resolve <IPipeline <PurchaseOrder> >("Basket");
                basketPipeline.Execute(basket.PurchaseOrder);

                result.Cart = MappingLibrary.MapPurchaseOrderToCart(basket.PurchaseOrder);
            }
        }
コード例 #5
0
        /// <inheritdoc />
        /// <summary>
        /// Updates a line item.
        /// </summary>
        protected override async Task <ActionResult> OnUpdateLineItemAsync(UpdateLineItemRequest request)
        {
            if (!int.TryParse(request.ContextId, out var contextId))
            {
                var name = $"{nameof(request)}.{nameof(request.ContextId)}";
                ModelState.AddModelError(name, $"The {name} field cannot be converted into a course id.");
            }

            if (!int.TryParse(request.LineItemId, out var lineItemId))
            {
                var name = $"{nameof(request)}.{nameof(request.LineItemId)}";
                ModelState.AddModelError(name, $"The {name} field cannot be converted into a gradebook column id.");
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(new ValidationProblemDetails(ModelState)));
            }

            if (!await _courseValidator.UserHasAccess(contextId))
            {
                return(Unauthorized(new ProblemDetails
                {
                    Title = "Not authorized",
                    Detail = "User not authorized to access the requested course."
                }));
            }

            var course = await _context.GetCourseAsync(contextId);

            if (course == null)
            {
                return(NotFound(new ProblemDetails
                {
                    Title = ReasonPhrases.GetReasonPhrase(StatusCodes.Status404NotFound),
                    Detail = "Course not found"
                }));
            }

            if (course.GradebookColumns.All(c => c.Id != lineItemId))
            {
                return(NotFound(new ProblemDetails
                {
                    Title = ReasonPhrases.GetReasonPhrase(StatusCodes.Status404NotFound),
                    Detail = "Gradebook column not found"
                }));
            }

            var gradebookColumn = await _context.GetGradebookColumnAsync(lineItemId);

            gradebookColumn.EndDateTime   = request.LineItem.EndDateTime;
            gradebookColumn.Label         = request.LineItem.Label;
            gradebookColumn.ResourceId    = request.LineItem.ResourceId;
            gradebookColumn.ScoreMaximum  = request.LineItem.ScoreMaximum;
            gradebookColumn.StartDateTime = request.LineItem.StartDateTime;
            gradebookColumn.Tag           = request.LineItem.Tag;
            if (request.LineItem.ResourceLinkId.IsPresent())
            {
                if (!int.TryParse(request.LineItem.ResourceLinkId, out var resourceLinkId))
                {
                    var name = $"{nameof(request)}.{nameof(request.LineItem)}.{request.LineItem.ResourceLinkId}";
                    ModelState.AddModelError(name, $"The {name} field cannot be converted into a valid resource link id.");
                    return(BadRequest(new ValidationProblemDetails(ModelState)));
                }

                var resourceLink = await _context.GetResourceLinkAsync(resourceLinkId);

                if (resourceLink == null)
                {
                    var name = $"{nameof(request)}.{nameof(request.LineItem)}.{request.LineItem.ResourceLinkId}";
                    ModelState.AddModelError(name, $"The {name} field is not a valid resource link id.");
                    return(BadRequest(new ValidationProblemDetails(ModelState)));
                }

                gradebookColumn.ResourceLink = resourceLink;
            }
            else
            {
                gradebookColumn.ResourceLink = null;
            }

            _context.GradebookColumns.Update(gradebookColumn);

            await _context.SaveChangesAsync();

            return(NoContent());
        }
コード例 #6
0
        protected override Task <ActionResult> OnUpdateLineItemAsync(UpdateLineItemRequest request)
        {
            var result = (ActionResult)Ok();

            return(Task.FromResult(result));
        }