Esempio n. 1
0
        /// <summary>
        /// Dodawanie zamówienia z terminala klienckiego w lokalu. Znajdywanie kelnera obsługującego zadanie następuje od razu.
        /// </summary>
        /// <param name="clientId">Identyfikator klienta</param>
        /// <param name="tableId">Numer stolika</param>
        /// <param name="menuItemsEnumerable">Elementy stanowiące zamówienie</param>
        /// <returns></returns>
        Order IClientDataAccessWCFService.AddOrder(int clientId, int tableId, IEnumerable<Tuple<int, int>> menuItemsEnumerable)
        {
            if (!CheckHasUserRole(clientId, UserRole.Client))
                throw new SecurityException(String.Format("Client id={0} is not logged in.", clientId));

            var menuItems = menuItemsEnumerable as Tuple<int, int>[] ?? menuItemsEnumerable.ToArray();
            if (menuItems == null || !menuItems.Any())
                throw new ArgumentNullException("menuItemsEnumerable");

            OrderEntity orderEntity = null;

            using (var db = new DataAccessProvider())
            {
                UserContextEntity client = db.Users.Find(clientId);
                if(client == null)
                    throw new ArgumentException(String.Format("No such user (id={0}) exists.", clientId));
                if(client.Role != UserRole.Client)
                    throw new ArgumentException(String.Format("User (id={0}) is not a client.", clientId));

                TableEntity table = db.Tables.Find(tableId);
                if (table == null)
                    throw new ArgumentException(String.Format("No such table (id={0}) exists.", tableId));

                orderEntity = new OrderEntity() { Client = client, Table = table, State = OrderState.Placed, PlacingDate = DateTime.Now, ClosingDate = DateTime.MaxValue };

                foreach (var tuple in menuItems)
                {
                    MenuItemEntity menuItem = db.MenuItems.Find(tuple.Item1);
                    if (menuItem == null)
                        throw new ArgumentException(String.Format("No such menuItem (id={0}) exists", tuple.Item1));
                    if (tuple.Item2 <= 0)
                        throw new ArgumentException(String.Format("MenuItem id={0} has quantity={1}", tuple.Item1, tuple.Item2));

                    MenuItemQuantityEntity menuItemQuantity = new MenuItemQuantityEntity() { MenuItem = menuItem, Quantity = tuple.Item2 };
                    orderEntity.MenuItems.Add(menuItemQuantity);
                }

                orderEntity = db.Orders.Add(orderEntity);
                db.SaveChanges();

                var order =  new Order(orderEntity);
                logger.Write(String.Format("Order {0} by user {1} was created.", order.Id, order.Client), LoggingCategory.Information);

                Task.Run(() => AssignOrder(order));

                return order;
            }
        }
 public MenuItemQuantity(MenuItemQuantityEntity menuItemQuantity)
     : base(menuItemQuantity)
 {
     MenuItem = new MenuItem(menuItemQuantity.MenuItem);
     Quantity = menuItemQuantity.Quantity;
 }
Esempio n. 3
0
        /// <summary>
        /// Dodawanie zamówienia z poziomu strony internetowej. Od zamówienia z lokalu różni się tym, iż klient podaje datę, kiedy zamierza przyjść do lokalu.
        /// Wybór stolika następuje automatycznie
        /// </summary>
        /// <param name="userId">Identyfikator klienta</param>
        /// <param name="orderTime">Czas obsługi zamówienia</param>
        /// <param name="menuItemsEnumerable">Elementy stanowiące zamówienie</param>
        /// <returns></returns>
        public Order AddOrder(int clientId, DateTime orderTime, IEnumerable<Tuple<int, int>> menuItemsEnumerable)
        {
            if (!CheckHasUserRole(clientId, UserRole.Client))
                throw new SecurityException(String.Format("Client id={0} is not logged in.", clientId));

            // Data zamówienia jest w przeszłości
            if (orderTime.CompareTo(DateTime.Now) < 0)
                throw new ArgumentException("Specified date already passed.", "orderTime");

            var menuItems = menuItemsEnumerable as Tuple<int, int>[] ?? menuItemsEnumerable.ToArray();
            if (menuItems == null || !menuItems.Any())
                throw new ArgumentNullException("menuItemsEnumerable");

            OrderEntity orderEntity = null;

            using (var db = new DataAccessProvider())
            {
                UserContextEntity client = db.Users.Find(clientId);
                if (client == null)
                    throw new ArgumentException(String.Format("No such user (id={0}) exists.", clientId));
                if (client.Role != UserRole.Client)
                    throw new ArgumentException(String.Format("User (id={0}) is not a client.", clientId));

                orderEntity = new OrderEntity() { Client = client, State = OrderState.Placed, PlacingDate = DateTime.Now, ClosingDate = DateTime.MaxValue };

                foreach (var tuple in menuItems)
                {
                    MenuItemEntity menuItem = db.MenuItems.Find(tuple.Item1);
                    if (menuItem == null)
                        throw new ArgumentException(String.Format("No such menuItem (id={0}) exists", tuple.Item1));
                    if (tuple.Item2 <= 0)
                        throw new ArgumentException(String.Format("MenuItem id={0} has quantity={1}", tuple.Item1, tuple.Item2));

                    MenuItemQuantityEntity menuItemQuantity = new MenuItemQuantityEntity() { MenuItem = menuItem, Quantity = tuple.Item2 };
                    orderEntity.MenuItems.Add(menuItemQuantity);
                }

                orderEntity = db.Orders.Add(orderEntity);
                db.SaveChanges();

                var order = new Order(orderEntity);

                orderAssignScheduler.AddOrder(new OrderServicingDateWrapper(order, orderTime));
                logger.Write(String.Format("Order {0} by user {1} added to scheduler. Deploy date {2}", order.Id, order.Client, orderTime), LoggingCategory.Information);
                return order;
            }
        }
 public MenuItemQuantity(MenuItemQuantityEntity menuItemQuantity)
     : base(menuItemQuantity)
 {
     MenuItem = new MenuItem(menuItemQuantity.MenuItem);
     Quantity = menuItemQuantity.Quantity;
 }