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; } }
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; } }
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); }
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; } }
/// <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; } }