示例#1
0
        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);
        }
示例#2
0
        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));
        }