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)); }
/// <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))); }
/// <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))); }
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); } }
/// <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()); }
protected override Task <ActionResult> OnUpdateLineItemAsync(UpdateLineItemRequest request) { var result = (ActionResult)Ok(); return(Task.FromResult(result)); }