/// <summary> /// Prepare paged shopping cart item list model /// </summary> /// <param name="searchModel">Shopping cart item search model</param> /// <param name="customer">Customer</param> /// <returns>Shopping cart item list model</returns> public virtual ShoppingCartItemListModel PrepareShoppingCartItemListModel(ShoppingCartItemSearchModel searchModel, Customer customer) { if (searchModel == null) { throw new ArgumentNullException(nameof(searchModel)); } if (customer == null) { throw new ArgumentNullException(nameof(customer)); } //get shopping cart items var items = _shoppingCartService.GetShoppingCart(customer, searchModel.ShoppingCartType, searchModel.StoreId, searchModel.ProductId, searchModel.StartDate, searchModel.EndDate).ToPagedList(searchModel); var isSearchProduct = searchModel.ProductId > 0; Product product = null; if (isSearchProduct) { product = _productService.GetProductById(searchModel.ProductId) ?? throw new Exception("Product is not found"); } //prepare list model var model = new ShoppingCartItemListModel().PrepareToGrid(searchModel, items, () => { return(items.Select(item => { //fill in model values from the entity var itemModel = item.ToModel <ShoppingCartItemModel>(); if (!isSearchProduct) { product = _productService.GetProductById(item.ProductId); } //convert dates to the user time itemModel.UpdatedOn = _dateTimeHelper.ConvertToUserTime(item.UpdatedOnUtc, DateTimeKind.Utc); //fill in additional values (not existing in the entity) itemModel.Store = _storeService.GetStoreById(item.StoreId)?.Name ?? "Deleted"; itemModel.AttributeInfo = _productAttributeFormatter.FormatAttributes(product, item.AttributesXml, customer); var unitPrice = _shoppingCartService.GetUnitPrice(item); itemModel.UnitPrice = _priceFormatter.FormatPrice(_taxService.GetProductPrice(product, unitPrice, out var _)); var subTotal = _shoppingCartService.GetSubTotal(item); itemModel.Total = _priceFormatter.FormatPrice(_taxService.GetProductPrice(product, subTotal, out _)); //set product name since it does not survive mapping itemModel.ProductName = product.Name; return itemModel; })); });
/// <summary> /// Prepare paged shopping cart item list model /// </summary> /// <param name="searchModel">Shopping cart item search model</param> /// <param name="customer">Customer</param> /// <returns>Shopping cart item list model</returns> public virtual ShoppingCartItemListModel PrepareShoppingCartItemListModel(ShoppingCartItemSearchModel searchModel, Customer customer) { if (searchModel == null) { throw new ArgumentNullException(nameof(searchModel)); } if (customer == null) { throw new ArgumentNullException(nameof(customer)); } //get shopping cart items var items = customer.ShoppingCartItems.Where(item => item.ShoppingCartType == searchModel.ShoppingCartType).ToList(); //prepare list model var model = new ShoppingCartItemListModel { Data = items.PaginationByRequestModel(searchModel).Select(item => { //fill in model values from the entity var itemModel = new ShoppingCartItemModel { Id = item.Id, ProductId = item.ProductId, Quantity = item.Quantity, ProductName = item.Product?.Name }; //convert dates to the user time itemModel.UpdatedOn = _dateTimeHelper.ConvertToUserTime(item.UpdatedOnUtc, DateTimeKind.Utc); //fill in additional values (not existing in the entity) itemModel.Store = _storeService.GetStoreById(item.StoreId)?.Name ?? "Deleted"; itemModel.AttributeInfo = _productAttributeFormatter.FormatAttributes(item.Product, item.AttributesXml, item.Customer); var unitPrice = _priceCalculationService.GetUnitPrice(item); itemModel.UnitPrice = _priceFormatter.FormatPrice(_taxService.GetProductPrice(item.Product, unitPrice, out var _)); var subTotal = _priceCalculationService.GetSubTotal(item); itemModel.Total = _priceFormatter.FormatPrice(_taxService.GetProductPrice(item.Product, subTotal, out _)); return(itemModel); }), Total = items.Count }; return(model); } #endregion }
public virtual async Task <IActionResult> GetCartDetails(ShoppingCartItemSearchModel searchModel) { if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageCurrentCarts)) { return(await AccessDeniedDataTablesJson()); } //try to get a customer with the specified id var customer = await _customerService.GetCustomerByIdAsync(searchModel.CustomerId) ?? throw new ArgumentException("No customer found with the specified id"); //prepare model var model = await _shoppingCartModelFactory.PrepareShoppingCartItemListModelAsync(searchModel, customer); return(Json(model)); }
public virtual IActionResult GetCartDetails(ShoppingCartItemSearchModel searchModel) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageCurrentCarts)) { return(AccessDeniedKendoGridJson()); } //try to get a customer with the specified id var customer = _customerService.GetCustomerById(searchModel.CustomerId) ?? throw new ArgumentException("No customer found with the specified id"); //prepare model var model = _shoppingCartModelFactory.PrepareShoppingCartItemListModel(searchModel, customer); return(Json(model)); }
/// <summary> /// Prepare shopping cart item search model /// </summary> /// <param name="searchModel">Shopping cart item search model</param> /// <returns>Shopping cart item search model</returns> protected virtual ShoppingCartItemSearchModel PrepareShoppingCartItemSearchModel(ShoppingCartItemSearchModel searchModel) { if (searchModel == null) { throw new ArgumentNullException(nameof(searchModel)); } //prepare page parameters searchModel.SetGridPageSize(); return(searchModel); }
/// <summary> /// Prepare paged shopping cart item list model /// </summary> /// <param name="searchModel">Shopping cart item search model</param> /// <param name="customer">Customer</param> /// <returns> /// A task that represents the asynchronous operation /// The task result contains the shopping cart item list model /// </returns> public virtual async Task <ShoppingCartItemListModel> PrepareShoppingCartItemListModelAsync(ShoppingCartItemSearchModel searchModel, Customer customer) { if (searchModel == null) { throw new ArgumentNullException(nameof(searchModel)); } if (customer == null) { throw new ArgumentNullException(nameof(customer)); } //get shopping cart items var items = (await _shoppingCartService.GetShoppingCartAsync(customer, searchModel.ShoppingCartType, searchModel.StoreId, searchModel.ProductId, searchModel.StartDate, searchModel.EndDate)).ToPagedList(searchModel); var isSearchProduct = searchModel.ProductId > 0; Product product = null; if (isSearchProduct) { product = await _productService.GetProductByIdAsync(searchModel.ProductId) ?? throw new Exception("Product is not found"); } //prepare list model var model = await new ShoppingCartItemListModel().PrepareToGridAsync(searchModel, items, () => { return(items .OrderByDescending(item => item.CreatedOnUtc) .SelectAwait(async item => { //fill in model values from the entity var itemModel = item.ToModel <ShoppingCartItemModel>(); if (!isSearchProduct) { product = await _productService.GetProductByIdAsync(item.ProductId); } //convert dates to the user time itemModel.UpdatedOn = await _dateTimeHelper.ConvertToUserTimeAsync(item.UpdatedOnUtc, DateTimeKind.Utc); //fill in additional values (not existing in the entity) itemModel.Store = (await _storeService.GetStoreByIdAsync(item.StoreId))?.Name ?? "Deleted"; itemModel.AttributeInfo = await _productAttributeFormatter.FormatAttributesAsync(product, item.AttributesXml, customer); var(unitPrice, _, _) = await _shoppingCartService.GetUnitPriceAsync(item, true); itemModel.UnitPrice = await _priceFormatter.FormatPriceAsync((await _taxService.GetProductPriceAsync(product, unitPrice)).price); var(subTotal, _, _, _) = await _shoppingCartService.GetSubTotalAsync(item, true); itemModel.Total = await _priceFormatter.FormatPriceAsync((await _taxService.GetProductPriceAsync(product, subTotal)).price); //set product name since it does not survive mapping itemModel.ProductName = product.Name; return itemModel; })); }); return(model); }