public int CreateOrder(CreateOrderDTO createOrderDTO) { var products = createOrderDTO.OrderDetails.Select(x => x.ProductId).ToList(); var order = new Order() { OrderDate = DateTime.Now, PaymentMethod = createOrderDTO.PaymentMethod, OrderStatus = OrderStatus.InProgress.ToString(), PaymentStatus = PaymentStatus.unPaid.ToString(), Total = dBContext.Product.Where(x => products.Contains(x.Id)).Select(x => x.Price * createOrderDTO.OrderDetails.Where(z => z.ProductId == x.Id).Select(z => z.Quanitity).First() + x.ShippingCost).Sum(), UserId = createOrderDTO.UserId, }; dBContext.Order.Add(order); dBContext.SaveChanges(); foreach (var item in createOrderDTO.OrderDetails) { var OrderDetails = new Entities.OrderDetails() { OrderId = order.Id, ProductId = item.ProductId, Quantity = item.Quanitity, }; dBContext.OrderDetails.Add(OrderDetails); } dBContext.SaveChanges(); return(order.Id); }
public static Entities.OrderDetails MapOrderDetails(int p, int orderID, int Quantity) { Entities.OrderDetails od = new Entities.OrderDetails(); Entities.Products prod = new Entities.Products(); od.ProductId = p; od.OrderId = orderID; od.Quantity = Quantity; return(od); }
public async Task <ActionResult> Index(Models.CartDTO Model) { try { if (!ModelState.IsValid) { return(View(Model)); } var ordersBLL = new OrdersBLL(); var restaurantsBLL = new RestaurantsBLL(); // create order + rows var orderDetails = new Entities.OrderDetails { ClientEmail = Model.ClientEmail, ClientName = Model.ClientName, ClientPhone = Model.ClientPhone, NameOnReceipt = Model.NameOnReceipt, Notes = Model.Notes, OrderDate = Model.OrderDate, RestaurantId = Model.RestaurantId, Type = Entities.eOrderType.TAKE_AWAY, PaymentType = Model.PaymentType, Status = Entities.eOrderStatus.NONE, IsPaid = false, TableNumber = Model.TableNumber }; var menu = await restaurantsBLL.GetMenu(Model.RestaurantId); var menuIds = Model.CartItemIds; var orderRows = menu.Items?.Join(menuIds, m => m.Id, idPair => idPair.ItemId, (m, idPair) => new { m, rowId = idPair.ItemRowId })?.Select(model => { var selectedProperties = Model.ItemPropertiesMap?.ContainsKey(model.rowId) ?? false ? Model.ItemPropertiesMap[model.rowId].Properties : ""; var isStarter = Model.IsStarterMap?.ContainsKey(model.rowId) ?? false ? Model.IsStarterMap[model.rowId].IsStarter : false; return(new Entities.OrderRow { IsDeal = false, ItemName = model.m.Name, ItemPrice = model.m.Price, ItemId = model.m.Id, Properties = selectedProperties, IsStarter = isStarter }); })?.ToList(); var sideDishesDB = new List <Entities.MenuItemSideDish>(); if (Model.ItemSideDishMap != null) { foreach (var sdm in Model.ItemSideDishMap) { var sd = await new MenuBLL().GetItemSideDishes(sdm.ItemId); sideDishesDB.Add(sd.FirstOrDefault(x => x.SideDishId == sdm.SidedishId)); } ; } var sideDishes = sideDishesDB?.Select(sd => { return(new Entities.OrderRow { IsDeal = false, ItemName = sd.SideDishName, ItemPrice = sd.Price, ItemId = sd.SideDishId, Notes = "תוספת למנה עיקרית" }); })?.ToList(); if ((sideDishes?.Count ?? 0) > 0) { orderRows.AddRange(sideDishes); } var orderId = await ordersBLL.Create(new Entities.Order { Details = orderDetails, Rows = orderRows }); // send overload alert if needed await restaurantsBLL.NotifyOverload(Model.RestaurantId); if (Model.PaymentType == Entities.ePaymentType.CASH) { // update order status var orderUpdated = await ordersBLL.SaveStatus(orderId, Entities.eOrderStatus.APPROVED); if (!orderUpdated) { LoggerSingleton.Instance.Info("Cardcom", "Save Order Status Failed", new List <string> { $"#{orderId}", "Status: APPROVED" }); } return(RedirectToAction("PayThanks", new { Id = orderId })); } else { return(RedirectToAction("Pay", new { Id = orderId })); } } catch (Exception ex) { ModelState.AddModelError("CustomError", ex.Message); return(View(Model)); } }
public Task sendNewOrder(Entities.OrderDetails newOrder) { return(Clients.Caller.SendAsync("The new order was created", newOrder)); }