Exemplo n.º 1
0
        public bool EditWaiter(int managerId, UserContext waiterToEdit)
        {
            if (!CheckHasUserRole(managerId, UserRole.Manager))
                throw new SecurityException(String.Format("User id = {0} is not logged in or is no manager", managerId));

            if (waiterToEdit == null)
                throw new ArgumentNullException("waiterToEdit");

            if (waiterToEdit.Role != UserRole.Waiter)
                throw new ArgumentException(String.Format("User id = {0} is no waiter.", waiterToEdit.Id));

            using(var db = new DataAccessProvider())
            {
                UserContextEntity editedWaiterContext = db.Users.Find(waiterToEdit.Id);
                if (editedWaiterContext == null || editedWaiterContext.IsDeleted)
                    return false;

                //db.Entry(editedWaiterContext).State = System.Data.Entity.EntityState.Detached;
                //db.Users.Attach(waiterToEdit);
                //db.Entry(waiterToEdit).State = System.Data.Entity.EntityState.Modified;

                editedWaiterContext.CopyData(waiterToEdit);
                db.Entry(editedWaiterContext).State = EntityState.Modified;
                db.SaveChanges();
                return true;
            }
        }
Exemplo n.º 2
0
        public bool EditTable(int managerId, Table tableToEdit)
        {
            if (!CheckHasUserRole(managerId, UserRole.Manager))
                throw new SecurityException(String.Format("User id = {0} is not logged in or is no manager", managerId));

            if (tableToEdit == null)
                throw new ArgumentNullException("tableToEdit is null");

            using(var db = new DataAccessProvider())
            {
                TableEntity editedTableEntity = db.Tables.Find(tableToEdit.Id);
                if (editedTableEntity == null || editedTableEntity.IsDeleted)
                    return false;

                //db.Entry(editedTableEntity).State = System.Data.Entity.EntityState.Detached;
                //db.Tables.Attach(tableToEdit);
                //db.Entry(tableToEdit).State = System.Data.Entity.EntityState.Modified;

                editedTableEntity.CopyData(tableToEdit);
                db.Entry(editedTableEntity).State = EntityState.Modified;

                db.SaveChanges();
                return true;
            }
        }
Exemplo n.º 3
0
        public UserContext AddWaiter(int managerId, string firstName, string lastName, string login, string password)
        {
            if (!CheckHasUserRole(managerId, UserRole.Manager))
                throw new SecurityException(String.Format("User id = {0} is not logged in or is no manager", managerId));

            if (String.IsNullOrEmpty(firstName))
                throw new ArgumentNullException("firstName");
            if (String.IsNullOrEmpty(lastName))
                throw new ArgumentNullException("lastName");
            if (String.IsNullOrEmpty(login))
                throw new ArgumentNullException("login");
            if (String.IsNullOrEmpty(password))
                throw new ArgumentNullException("password");

            UserContextEntity newWaiterContextEntity = null;

            using (var db = new DataAccessProvider())
            {
                var waiterContextToAdd = new UserContextEntity() { FirstName = firstName, LastName = lastName, Login = login, Role = UserRole.Waiter};
                var usersSameLogin = db.Users.Where(u => u.Role == UserRole.Waiter && u.Login.Equals(login));

                if (usersSameLogin != null && usersSameLogin.Any())
                {
                    foreach (UserContextEntity userContextEntity in usersSameLogin)
                        if (userContextEntity.Equals(waiterContextToAdd))
                        {
                            if (userContextEntity.IsDeleted)
                                userContextEntity.IsDeleted = false;

                            newWaiterContextEntity = userContextEntity;
                            break;
                        }

                    //istnieją kelnerzy o tym samym loginie, ale nie są tacy sami jak ten co chcemy dodać.
                    if(newWaiterContextEntity == null)
                        throw new ArgumentException(String.Format("login = {0} already exists in database!", login));
                }

                if(newWaiterContextEntity == null)
                    newWaiterContextEntity = db.Users.Add(waiterContextToAdd);
                db.SaveChanges();

                PasswordEntity newWaiterPassword = db.Passwords.FirstOrDefault(p => p.UserId == newWaiterContextEntity.Id);
                if (newWaiterPassword == null)
                {
                    newWaiterPassword = new PasswordEntity()
                    {
                        UserId = newWaiterContextEntity.Id,
                        Hash = HashClass.CreateSecondHash(password)
                    };
                    db.Passwords.Add(newWaiterPassword);
                    db.SaveChanges();
                }
                else
                {
                    newWaiterPassword.Hash = HashClass.CreateSecondHash(password);
                    db.Entry(newWaiterPassword).State = EntityState.Detached;
                    db.Passwords.Attach(newWaiterPassword);
                    db.Entry(newWaiterPassword).State = EntityState.Modified;
                    db.SaveChanges();
                }

            }

            return new UserContext(newWaiterContextEntity);
        }
Exemplo n.º 4
0
        public bool EditMenuItem(int managerId, MenuItem menuItemToEdit)
        {
            if (!CheckHasUserRole(managerId, UserRole.Manager))
                throw new SecurityException(String.Format("User id = {0} is not logged in or is no manager", managerId));

            if (menuItemToEdit == null)
                throw new ArgumentNullException("menuItemToEdit");

            using(var db = new DataAccessProvider())
            {
                MenuItemEntity editedMenuItemEntity = db.MenuItems.Find(menuItemToEdit.Id);
                if (editedMenuItemEntity == null || editedMenuItemEntity.IsDeleted)
                    return false;

                //db.Entry(editedMenuItem).State = System.Data.Entity.EntityState.Detached;
                //db.MenuItems.Attach(menuItemToEdit);
                //db.Entry(menuItemToEdit).State = System.Data.Entity.EntityState.Modified;

                editedMenuItemEntity.CopyData(menuItemToEdit);
                MenuItemCategoryEntity editedMenuItemCategoryEntity =
                    db.MenuItemCategories.Find(menuItemToEdit.Category.Id);

                if (editedMenuItemCategoryEntity != null)
                    editedMenuItemEntity.Category = editedMenuItemCategoryEntity;

                db.Entry(editedMenuItemEntity).State = EntityState.Modified;

                db.SaveChanges();
                return true;
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Szuka wolnego stolika i próbuje dopasować kelnera do zadania
        /// </summary>
        /// <param name="orderToAssign">Zadanie do przyporządkowania</param>
        /// <remarks>Szukanie stolika odbywa się poprzez usuwanie z kolekcji wszystkich stolików tych, dla których aktualnie istnieją aktywne zamówienia</remarks>
        /// <returns></returns>
        private bool FindTableAndAssignOrder(Order orderToAssign)
        {
            if(orderToAssign == null)
                throw new ArgumentNullException("orderToAssign");

            using (var db = new DataAccessProvider())
            {
                //znalezienie wolnego stolika
                var orderEntity = db.Orders.Include("MenuItems").Include("MenuItems.MenuItem").Include("MenuItems.MenuItem.Category").Include("Waiter").Include("Table").Include("Client").FirstOrDefault(o => o.Id == orderToAssign.Id);
                if (orderEntity == null)
                    throw new ArgumentException(String.Format("No order of id = {0} exists.", orderToAssign.Id));

                var tableList = db.Tables.ToList();

                //Nie ma w bazie stolików, nie można przydzielić zamówienia
                if (tableList == null || !tableList.Any())
                    return false;

                var occupiedTableList =
                    db.Orders.Include("Table")
                        .Where(o => o.State == OrderState.Accepted || o.State == OrderState.AwaitingDelivery)
                        .Select(o => o.Table)
                        .ToList();

                if(occupiedTableList != null && occupiedTableList.Any())
                    foreach (var table in occupiedTableList)
                        tableList.Remove(table);

                //wszystkie stoliki są zajęte
                if (tableList.Count == 0)
                {
                    logger.Write(String.Format("There is no free table for order {0} by client {1}({2})", orderToAssign.Id, orderToAssign.Client.Login, orderToAssign.Client.Id), LoggingCategory.Warning);
                    return false;
                }

                orderEntity.Table = tableList.First();
                db.Entry(orderEntity).State = EntityState.Modified;
                orderToAssign = new Order(orderEntity);
                db.SaveChanges();

                Task.Run(() => AssignOrder(orderToAssign));
                return true;
            }
        }