示例#1
0
        public ResponseModel GetDeliveryCharges(PlaceOrderRequestModel listModel)
        {
            var response = new ResponseModel
            {
                Success  = false,
                Messages = new List <string>()
            };

            if (listModel == null || listModel.Items == null || listModel.Items.Count == 0 && string.IsNullOrEmpty(listModel.Cords))
            {
                response.Messages.Add("Data not mapped");
                response.Data = listModel;
            }
            else if (listModel.Cords.Split('_').Length != 2)
            {
                response.Messages.Add("Invalid Cord format. Please specify in Lat_Lang .i.e. '32.202895_74.176716'");
                response.Data = listModel;
            }
            else
            {
                try
                {
                    response.Data = new { DeliveryAmount = CommonService.GetDeliveryAmount(), DeliveryTime = 50 };
                    response.Messages.Add("Success");
                    response.Success = true;
                }
                catch (Exception excep)
                {
                    response.Messages.Add("Something bad happened.");
                }
            }
            return(response);
        }
示例#2
0
        public ResponseModel PlaceOrder(PlaceOrderRequestModel listModel)
        {
            var response = new ResponseModel
            {
                Success  = false,
                Messages = new List <string>()
            };

            if (listModel == null || listModel.Items == null || listModel.Items.Count == 0 && string.IsNullOrEmpty(listModel.Cords))
            {
                response.Messages.Add("Data not mapped");
                response.Data = listModel;
            }
            else if (listModel.Cords.Split('_').Length != 2)
            {
                response.Messages.Add("Invalid Cord format. Please specify in Lat_Lang .i.e. '32.202895_74.176716'");
                response.Data = listModel;
            }
            else
            {
                try
                {
                    var contextnew  = new ApplicationDbContext();
                    var userStore   = new UserStore <ApplicationUser>(contextnew);
                    var userManager = new UserManager <ApplicationUser>(userStore);
                    var user        = userManager.FindByName(User.Identity.Name);

                    var item = OrderService.Place(listModel, user.Id);
                    response.Data = item;
                    response.Messages.Add("Success");
                    response.Success = true;
                }
                catch (Exception excep)
                {
                    response.Messages.Add("Something bad happened.");
                }
            }
            return(response);
        }
示例#3
0
 public static string Place(PlaceOrderRequestModel request, string orderBy)
 {
     using (var dbContext = new DeliversEntities())
     {
         var totalAmount =
             request.Items.Sum(i => ItemDetailsService.GetItemDetailLocalById(i.ItemId).Price *i.Quantity);
         var order = new Order
         {
             Address       = request.Address,
             Instructions  = request.Instructions,
             Status        = OrderHistoryEnu.WaitingForPickup.Value,
             OrderBy       = orderBy,
             Amount        = totalAmount,
             DateTime      = DateTime.Now,
             EstimatedTime = "45 minutes away",
         };
         dbContext.Orders.Add(order);
         foreach (var item in request.Items)
         {
             var itmObj = new OrderDetail
             {
                 OrderId  = order.Id,
                 ItemId   = item.ItemId,
                 Quantity = item.Quantity,
             };
             dbContext.OrderDetails.Add(itmObj);
         }
         dbContext.OrderHistories.Add(new OrderHistory
         {
             OrderId  = order.Id,
             DateTime = DateTime.Now,
             MovedBy  = orderBy,
             Status   = OrderHistoryEnu.WaitingForPickup.Value
         });
         dbContext.SaveChanges();
         return(order.EstimatedTime);
     }
 }
示例#4
0
        public async System.Threading.Tasks.Task <ResponseModel_PlaceOrder> PlaceOrderAsync(PlaceOrderRequestModel listModel)
        {
            var response = new ResponseModel_PlaceOrder
            {
                Success  = false,
                Messages = new List <string>()
            };

            if (listModel == null || listModel.Items == null || listModel.Items.Count == 0 && string.IsNullOrEmpty(listModel.Cords))
            {
                response.Messages.Add("Data not mapped");
                response.Data = listModel;
            }
            else if (listModel.Cords.Split('_').Length != 2)
            {
                response.Messages.Add("Invalid Cord format. Please specify in Lat_Lang .i.e. '32.202895_74.176716'");
                response.Data = listModel;
            }
            else
            {
                try
                {
                    var orderById = listModel.OrderPlacedById;
                    if (string.IsNullOrEmpty(listModel.OrderPlacedById))
                    {
                        var contextnew  = new ApplicationDbContext();
                        var userStore   = new UserStore <ApplicationUser>(contextnew);
                        var userManager = new UserManager <ApplicationUser>(userStore);
                        var user        = userManager.FindByName(User.Identity.Name);
                        orderById = user.Id;
                    }

                    var signalRUrl = ConfigurationManager.AppSettings["signalRHubUrl"];
                    var item       = OrderService.Place(listModel, orderById);
                    response.Data     = item.EstimatedTime;
                    response.OrderId  = item.OrderIds;
                    response.SerialNo = item.SerailNo;
                    response.Messages.Add("Success");
                    response.Success = true;

                    //get orders by serial no here
                    var _order = OrderService.GetOrderDetailsBySerialNo(item.SerailNo);
                    await SignalRService.NotifyNewOrdersReceivedAsync(_order.Orders, signalRUrl);
                }
                catch (Exception excep)
                {
                    response.Messages.Add("Something bad happened.");
                }
            }
            return(response);
        }
示例#5
0
        public static PlaceOrderResponseModel Place(PlaceOrderRequestModel request, string orderBy)
        {
            DbGeography userLoc       = null;
            var         orderstatus   = OrderHistoryEnu.Placed.Value;
            var         estimatedTime = "45 minutes away";
            var         orderIds      = new List <string>();

            if (!string.IsNullOrEmpty(request.Cords) && request.Cords != "")
            {
                var latlng = request.Cords.Split('_').ToList();
                if (latlng.Count == 2)
                {
                    userLoc = CommonService.ConvertLatLonToDbGeography(latlng[1], latlng[0]); // lat _ lng
                }
            }


            using (var dbContext = new DeliversEntities())
            {
                foreach (var item in request.Items)
                {
                    var dbItem = dbContext.ItemDetails.FirstOrDefault(i => i.Id == item.ItemId);
                    if (dbItem != null)
                    {
                        item.RestId = dbItem.ListItemId;
                    }
                }
            }


            var rest_groups = request.Items.GroupBy(item => item.RestId).ToList();
            var serial      = Guid.NewGuid().ToString().Substring(0, 6).ToUpper();

            using (var dbContext = new DeliversEntities())
            {
                foreach (var localG in rest_groups)
                {
                    var localList   = localG.ToList();
                    var totalAmount = localList.Sum(i => ItemDetailsService.GetItemDetailLocalById(i.ItemId).Price *i.Quantity);
                    var order       = new Order
                    {
                        Address       = request.Address,
                        Instructions  = request.Instructions,
                        Status        = orderstatus,
                        OrderBy       = orderBy,
                        Amount        = totalAmount,
                        DateTime      = CommonService.GetSystemTime(),
                        Cords         = userLoc,
                        EstimatedTime = estimatedTime,
                        SerialNo      = serial,
                        PickedBy      = Guid.Empty.ToString(),
                        UpdatedAt     = CommonService.GetSystemTime(),
                        DeliveryCost  = CommonService.GetDeliveryAmount()
                    };
                    dbContext.Orders.Add(order);

                    dbContext.OrderHistories.Add(new OrderHistory
                    {
                        OrderId   = order.Id,
                        DateTime  = CommonService.GetSystemTime(),
                        Status    = orderstatus,
                        IsCurrent = true
                    });
                    foreach (var item in localList)
                    {
                        var itmObj = new OrderDetail
                        {
                            OrderId  = order.Id,
                            ItemId   = item.ItemId,
                            Quantity = item.Quantity,
                            RestId   = item.RestId
                        };
                        dbContext.OrderDetails.Add(itmObj);
                    }
                    dbContext.SaveChanges();

                    // generate notification
                    NotificationService.ProcessNotificationRequest(orderstatus, order.Id);
                    orderIds.Add(order.Id.ToString());
                }

                return(new PlaceOrderResponseModel {
                    EstimatedTime = estimatedTime, OrderIds = orderIds, SerailNo = serial
                });
            }
        }