public async Task <OrderDetailResponseModel> GetOrder(Guid orderId, Guid userId) { var order = await this.foodAppDbContext.Orders.AsNoTracking().Include(x => x.Restaurant) .FirstOrDefaultAsync(x => x.Id == orderId && x.UserId == userId); if (order == null) { return(null); } var orderLines = await this.foodAppDbContext.OrderLines.AsNoTracking().Include(c => c.OrderLineOptions) .Where(x => x.OrderId == orderId).ToListAsync(); var orderResponseModel = new OrderDetailResponseModel { OrderId = order.Id, RestaurantId = order.Restaurant.Id, RestaurantName = order.Restaurant.Name, TotalAmount = order.TotalAmount }; var orderLineResponseModels = new List <OrderDetailResponseModel.OrderLineResponseModel>(); if (orderLines != null) { var orderLineIds = orderLines.Select(x => x.Id).ToList(); var orderLineOptions = await this.foodAppDbContext.OrderLineOptions.AsNoTracking() .Where(x => orderLineIds.Any(o => o == x.OrderLineId)) .ToListAsync(); var foodIds = orderLines.Select(x => x.FoodId).ToList(); var foods = await this.foodAppDbContext.Foods.AsNoTracking() .Where(x => foodIds.Any(f => f == x.Id)) .ToListAsync(); var foodCustomizationOptionIds = orderLineOptions.Select(x => x.FoodCustomizationOptionId).ToList(); var foodCustomizationOptions = await this.foodAppDbContext.FoodCustomizationOptions.AsNoTracking() .Where(x => foodCustomizationOptionIds.Any(f => f == x.Id)) .ToListAsync(); foreach (var orderLine in orderLines) { var orderLineOptionResponseModels = new List <OrderDetailResponseModel.OrderLineResponseModel.OrderLineOptionResponseModel>(); foreach (var orderLineOption in orderLine.OrderLineOptions) { var foodCustomizationOption = foodCustomizationOptions.FirstOrDefault(x => x.Id == orderLineOption.FoodCustomizationOptionId); var orderLineOptionResponseModel = new OrderDetailResponseModel.OrderLineResponseModel.OrderLineOptionResponseModel { FoodCustomizationOptionId = orderLineOption.FoodCustomizationOptionId, FoodCustomizationOptionName = foodCustomizationOption.Name, UnitPrice = orderLineOption.UnitPrice }; orderLineOptionResponseModels.Add(orderLineOptionResponseModel); } var food = foods.FirstOrDefault(x => x.Id == orderLine.FoodId); var orderLineResponseModel = new OrderDetailResponseModel.OrderLineResponseModel { FoodId = orderLine.FoodId, FoodName = food.Name, Quantity = orderLine.Quantity, UnitPrice = orderLine.UnitPrice, OrderLineOptions = orderLineOptionResponseModels }; orderLineResponseModels.Add(orderLineResponseModel); } orderResponseModel.OrderLines = orderLineResponseModels; } return(orderResponseModel); }
public async Task <ApiResult <OrderDetailResponseModel> > GetOrderByOrderId(int userId, int orderId) { OrderDetailResponseModel model = null; OrderServiceResponseViewModel service = new OrderServiceResponseViewModel(); List <OrderCategoryResponceViewModel> categores = new List <OrderCategoryResponceViewModel>(); OrderCategoryResponceViewModel category = new OrderCategoryResponceViewModel(); OrderServiceByKgResponseViewModel ServiceByKg = null; try { SqlParameter OrderId = new SqlParameter("@OrderId", System.Data.SqlDbType.Int) { Value = orderId }; SqlParameter UserId = new SqlParameter("@UserId", System.Data.SqlDbType.Int) { Value = userId }; var result = _context.ExecuteStoreProcedure("[usp_getOrderDetail]", UserId, OrderId); if (result.Tables.Count > 0 && result.Tables[0].Rows.Count > 0) { foreach (System.Data.DataRow dr in result.Tables[0].Rows) { model = new OrderDetailResponseModel { OrderId = (dr["OrderId"] != DBNull.Value) ? Convert.ToInt32(dr["OrderId"]) : 0, OrderRef = (dr["InvoiceNo"] != DBNull.Value) ? Convert.ToString(dr["InvoiceNo"]) : string.Empty, OrderDate = (dr["OrderDate"] != DBNull.Value) ? Convert.ToString(dr["OrderDate"]) : string.Empty, OrderStatusId = (dr["OrderStatusId"] != DBNull.Value) ? Convert.ToInt32(dr["OrderStatusId"]) : 0, OrderStatus = (dr["OrderStatus"] != DBNull.Value) ? Convert.ToString(dr["OrderStatus"]) : string.Empty, TotalPrice = (dr["TotalPrice"] != DBNull.Value) ? Convert.ToDecimal(dr["TotalPrice"]) : 0, TotalKG = (dr["TotalKG"] != DBNull.Value) ? Convert.ToDecimal(dr["TotalKG"]) : 0, ItemCount = (dr["ItemCount"] != DBNull.Value) ? Convert.ToInt32(dr["ItemCount"]) : 0, IsKg = (dr["IsKg"] != DBNull.Value) ? Convert.ToBoolean(dr["IsKg"]) : false, OrderAmount = (dr["OrderAmount"] != DBNull.Value) ? Convert.ToDecimal(dr["OrderAmount"]) : 0, TaxAmount = (dr["TaxAmount"] != DBNull.Value) ? Convert.ToDecimal(dr["TaxAmount"]) : 0, DeliveryDateTime = (dr["DeliveryDateTime"] != DBNull.Value) ? Convert.ToString(dr["DeliveryDateTime"]) : string.Empty, PickupDateTime = (dr["PickupDateTime"] != DBNull.Value) ? Convert.ToString(dr["PickupDateTime"]) : string.Empty, PickUpAddress = (dr["PickUpAddress"] != DBNull.Value) ? Convert.ToString(dr["PickUpAddress"]) : string.Empty }; } foreach (System.Data.DataRow row in result.Tables[1].Rows) { service = new OrderServiceResponseViewModel() { ServiceId = (row["ServiceId"] != DBNull.Value) ? Convert.ToInt32(row["ServiceId"]) : 0, ServiceName = (row["ServiceName"] != DBNull.Value) ? Convert.ToString(row["ServiceName"]) : string.Empty, ServiceUrl = "", IsKg = model.IsKg }; model.Services.Add(service); if (result.Tables.Count > 0 && result.Tables[2].Rows.Count > 0) { foreach (System.Data.DataRow catrow in result.Tables[2].Rows) { if (((row["ServiceId"] != DBNull.Value) ? Convert.ToInt32(row["ServiceId"]) : 0) == ((catrow["ServiceId"] != DBNull.Value) ? Convert.ToInt32(catrow["ServiceId"]) : 0)) { category = new OrderCategoryResponceViewModel { CategoryId = (catrow["categoryId"] != DBNull.Value) ? Convert.ToInt32(catrow["categoryId"]) : 0, CategoryName = (catrow["CategoryName"] != DBNull.Value) ? Convert.ToString(catrow["CategoryName"]) : string.Empty }; service.Categories.Add(category); if (result.Tables.Count > 0 && result.Tables[3].Rows.Count > 0) { foreach (System.Data.DataRow itmrow in result.Tables[3].Rows) { if ((((catrow["CategoryId"] != DBNull.Value) ? Convert.ToInt32(catrow["CategoryId"]) : 0) == ((itmrow["CategoryId"] != DBNull.Value) ? Convert.ToInt32(itmrow["CategoryId"]) : 0)) && (((catrow["ServiceId"] != DBNull.Value) ? Convert.ToInt32(catrow["ServiceId"]) : 0) == ((itmrow["ServiceId"] != DBNull.Value) ? Convert.ToInt32(itmrow["ServiceId"]) : 0))) { category.OrderItemList.Add(new OrderItemDetailResponseViewModel { ItemId = (itmrow["ItemId"] != DBNull.Value) ? Convert.ToInt32(itmrow["ItemId"]) : 0, ItemName = (itmrow["ItemName"] != DBNull.Value) ? Convert.ToString(itmrow["ItemName"]) : string.Empty, Quantity = (itmrow["Quantity"] != DBNull.Value) ? Convert.ToInt32(itmrow["Quantity"]) : 0, TotalPrice = (itmrow["TotalPrice"] != DBNull.Value) ? Convert.ToDecimal(itmrow["TotalPrice"]) : 0, UnitPrice = (itmrow["UnitPrice"] != DBNull.Value) ? Convert.ToDecimal(itmrow["UnitPrice"]) : 0 }); } } } } } } } if (result.Tables.Count > 0 && result.Tables[4].Rows.Count > 0) { foreach (System.Data.DataRow kgdata in result.Tables[4].Rows) { ServiceByKg = new OrderServiceByKgResponseViewModel() { OrderId = (kgdata["OrderId"] != DBNull.Value) ? Convert.ToInt32(kgdata["OrderId"]) : 0, StoreId = (kgdata["StoreId"] != DBNull.Value) ? Convert.ToInt32(kgdata["StoreId"]) : 0, ServiceId = (kgdata["ServiceId"] != DBNull.Value) ? Convert.ToInt32(kgdata["ServiceId"]) : 0, ServiceName = (kgdata["ServiceName"] != DBNull.Value) ? Convert.ToString(kgdata["ServiceName"]) : string.Empty, TotalPrice = (kgdata["TotalPrice"] != DBNull.Value) ? Convert.ToDecimal(kgdata["TotalPrice"]) : 0, Quantity = (kgdata["Quantity"] != DBNull.Value) ? Convert.ToDecimal(kgdata["Quantity"]) : 0, ServiceImage = (kgdata["ServiceImage"] != DBNull.Value) ? Convert.ToString(kgdata["ServiceImage"]) : string.Empty, }; model.ServiceByKg.Add(ServiceByKg); } } } } catch (Exception ex) { ErrorTrace.Logger(LogArea.ApplicationTier, ex); return(new ApiResult <OrderDetailResponseModel>(new ApiResultCode(ApiResultType.Error, 0, "No data in given request"))); } return(model == null ? new ApiResult <OrderDetailResponseModel>(new ApiResultCode(ApiResultType.Error, 1, "No data in given request")) : new ApiResult <OrderDetailResponseModel>(new ApiResultCode(ApiResultType.Success), model)); }