Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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));
 }