public async Task <Result> Get(int id) { var goods = await _goodsRepository.Query() .Include(e => e.ThumbnailImage) .Include(e => e.GoodsMedias).ThenInclude(e => e.Media) .Include(e => e.Childrens).ThenInclude(e => e.OptionCombinations).ThenInclude(e => e.Option) .Include(e => e.Childrens) .Include(e => e.OptionValues).ThenInclude(e => e.Option) .FirstOrDefaultAsync(e => e.Id == id); if (goods == null) { return(Result.Fail(ResultCodes.IdInvalid)); } var goodsRes = _mapper.Map <AdminGoodsGetResponse>(goods); var optionIds = goods.OptionValues.OrderBy(e => e.DisplayOrder).ThenBy(x => x.Option.Name).GroupBy(c => c.OptionId).Select(s => s.Key).OrderBy(c => c); var options = new List <AdminGoodsGetOptionResponse>(); foreach (var optionId in optionIds) { var first = goods.OptionValues.First(c => c.OptionId == optionId); var result = new AdminGoodsGetOptionResponse { Id = first.OptionId, Name = first.Option.Name, Createat = first.Createat, Values = goods.OptionValues.Where(e => e.OptionId == optionId).Select(s => new AdminGoodsGetOptionValueResponse { Id = s.Id, DisplayOrder = s.DisplayOrder, Value = s.Value, Createat = s.Createat }).OrderBy(c => c.DisplayOrder).ToList() }; options.Add(result); } goodsRes.Options = options; goodsRes.Variations = goods.Childrens.Select(s => new AdminGoodsGetVariationResponse { Id = s.Id, NormalizedName = s.NormalizedName, StockQuantity = s.StockQuantity, Price = s.Price, OptionCombinations = s.OptionCombinations.Select(e => new AdminGoodsGetOptionCombinationResponse { OptionId = e.OptionId, OptionName = e.Option?.Name, Value = e.Value, DisplayOrder = e.DisplayOrder }).OrderBy(e => e.DisplayOrder).ToList() }).ToList(); return(Result.Ok(goodsRes)); }
public async Task <Result> PendingList([FromQuery] PaginationRequest request) { var page = request.Page; var limit = request.Limit; if (page <= 0) { page = 1; } if (limit <= 0) { limit = 10; } var userId = HttpContext.GetUserId(); var queryable = _orderItemRepository.Query().Where(e => e.Order.CustomerId == userId && e.Order.OrderStatus == OrderStatus.PaymentReceived && e.Status == OrderItemStatus.Default); var totalRows = await queryable.CountAsync(); var orderItems = await queryable .Include(e => e.Goods).ThenInclude(e => e.Childrens).ThenInclude(e => e.OptionCombinations).ThenInclude(e => e.Option) .Include(e => e.Goods).ThenInclude(e => e.OptionValues).ThenInclude(e => e.Option) .OrderByDescending(e => e.Id) .Skip((page - 1) * limit).Take(limit) .ToListAsync(); var orderItemsResponse = _mapper.Map <List <ShipmentPendingListResponse> >(orderItems); for (int i = 0; i < orderItems.Count; i++) { var item = orderItems[i]; var optionIds = item.Goods.OptionValues.OrderBy(e => e.DisplayOrder) .ThenBy(x => x.Option.Name) .GroupBy(c => c.OptionId) .Select(s => s.Key) .OrderBy(c => c); var options = new List <AdminGoodsGetOptionResponse>(); foreach (var optionId in optionIds) { var first = item.Goods.OptionValues.First(c => c.OptionId == optionId); var result = new AdminGoodsGetOptionResponse { Id = first.OptionId, Name = first.Option.Name, Createat = first.Createat, Values = item.Goods.OptionValues.Where(e => e.OptionId == optionId).Select(s => new AdminGoodsGetOptionValueResponse { Id = s.Id, DisplayOrder = s.DisplayOrder, Value = s.Value, Createat = s.Createat }).OrderBy(c => c.DisplayOrder).ToList() }; options.Add(result); } orderItemsResponse[i].Options = options; orderItemsResponse[i].Variations = item.Goods.Childrens.Select(s => new AdminGoodsGetVariationResponse { Id = s.Id, NormalizedName = s.NormalizedName, StockQuantity = s.StockQuantity, Price = s.Price, OptionCombinations = s.OptionCombinations.Select(e => new AdminGoodsGetOptionCombinationResponse { OptionId = e.OptionId, OptionName = e.Option?.Name, Value = e.Value, DisplayOrder = e.DisplayOrder }).OrderBy(e => e.DisplayOrder).ToList() }).ToList(); } var pagination = new PaginationResponse(page, totalRows, orderItemsResponse); return(Result.Ok(pagination)); }
public async Task <Result> Get(int id) { var discountRate = 100f; // if (user.Role != PartnerRole.Default) // { // var partnerConfig = _customerManager.GetUserPartnerConfig(user.Role); // discountRate = partnerConfig.DiscountRate / 100f; // } var goods = await _goodsRepository.Query() .Include(e => e.ThumbnailImage) .Include(e => e.GoodsMedias).ThenInclude(e => e.Media) .Include(e => e.Childrens).ThenInclude(e => e.OptionCombinations).ThenInclude(e => e.Option) .Include(e => e.Childrens) .Include(e => e.OptionValues).ThenInclude(e => e.Option) .FirstOrDefaultAsync(e => e.Id == id); if (goods == null) { return(Result.Fail(ResultCodes.IdInvalid)); } var goodsRes = _mapper.Map <GoodsGetResponse>(goods); var authenticationScheme = JwtBearerDefaults.AuthenticationScheme; var auth = await HttpContext.AuthenticateAsync(authenticationScheme); if (auth.Succeeded) { var user = await _customerManager.GetUserAsync(); if (user != null) { if (user.Role == PartnerRole.CityPartner && goods.CityDiscount > 0) { discountRate = goods.CityDiscount; } else if (user.Role == PartnerRole.BranchPartner && goods.BranchDiscount > 0) { discountRate = goods.BranchDiscount; } } } goodsRes.DiscountPrice = (int)(goodsRes.Price * (discountRate / 100f)); var optionIds = goods.OptionValues.OrderBy(e => e.DisplayOrder).ThenBy(x => x.Option.Name).GroupBy(c => c.OptionId).Select(s => s.Key).OrderBy(c => c); var options = new List <AdminGoodsGetOptionResponse>(); foreach (var optionId in optionIds) { var first = goods.OptionValues.First(c => c.OptionId == optionId); var result = new AdminGoodsGetOptionResponse { Id = first.OptionId, Name = first.Option.Name, Createat = first.Createat, Values = goods.OptionValues.Where(e => e.OptionId == optionId).Select(s => new AdminGoodsGetOptionValueResponse { Id = s.Id, DisplayOrder = s.DisplayOrder, Value = s.Value, Createat = s.Createat }).OrderBy(c => c.DisplayOrder).ToList() }; options.Add(result); } goodsRes.Options = options; goodsRes.Variations = goods.Childrens.Select(s => new AdminGoodsGetVariationResponse { Id = s.Id, NormalizedName = s.NormalizedName, StockQuantity = s.StockQuantity, Price = s.Price, DiscountPrice = (int)(s.Price * discountRate), OptionCombinations = s.OptionCombinations.Select(e => new AdminGoodsGetOptionCombinationResponse { OptionId = e.OptionId, OptionName = e.Option?.Name, Value = e.Value, DisplayOrder = e.DisplayOrder }).OrderBy(e => e.DisplayOrder).ToList() }).ToList(); return(Result.Ok(goodsRes)); }