Example #1
0
        /// <summary>
        /// Creates a new user and account
        /// </summary>
        /// <param name="user">The user</param>
        /// <param name="password">The account</param>
        public void AddUserAndAccount(User user, string password)
        {
            var db = new ReScrumEntities();

            var newUser = new data.User
            {
                EmployeeNumber  = user.EmployeeNumber,
                Forename        = user.Forename,
                Surname         = user.Surname,
                Email           = user.Email,
                JobTitle        = user.JobTitle,
                IsLineManager   = user.IsLineManager,
                IsAdministrator = user.IsAdministrator,
            };

            db.Users.Add(newUser);

            var team = db.Teams.Where(t => t.TeamId == user.Team).FirstOrDefault();

            newUser.Teams.Add(team);

            var account = new data.Account
            {
                User     = newUser,
                Password = Encoding.UTF8.GetBytes(password),
            };

            db.Accounts.Add(account);

            db.SaveChanges();
        }
Example #2
0
        /// <summary>
        /// Calls the unconfirmed booking method for each attendee of the group booking
        /// </summary>
        /// <param name="date">The date</param>
        /// <param name="users">The attendees</param>
        /// <param name="teams">The teams</param>
        /// <param name="startTime">The start time</param>
        /// <param name="endTime">The end time</param>
        /// <param name="resourceId">The resource</param>
        /// <param name="userId">The user</param>
        public void AddGroupBooking(DateTime date, List <string> users, List <string> teams, Guid?startTime, Guid?endTime, Guid?resourceId, Guid?userId)
        {
            var db = new ReScrumEntities();

            var startSlot = db.Slots.Where(s => s.SlotId == startTime).FirstOrDefault();
            var endSlot   = db.Slots.Where(s => s.SlotId == endTime).FirstOrDefault();
            var user      = db.Users.Where(u => u.UserId == userId).FirstOrDefault();
            var resource  = db.Resources.Where(r => r.ResourceId == resourceId).FirstOrDefault();

            var slotList = db.Slots.Where(s => s.StartTime >= startSlot.StartTime &&
                                          s.EndTime <= endSlot.EndTime).ToList();

            //Add booking for Attendees
            foreach (string data in users)
            {
                var attendee = db.Users.Where(u => u.UserId == new Guid(data)).FirstOrDefault();
                AddUnconfirmedBooking(db, slotList, attendee, resource, date, user);
            }

            //Add booking for team memebers
            foreach (string data in teams)
            {
                var team = db.Teams.Where(u => u.TeamId == new Guid(data)).FirstOrDefault();
                foreach (DataLayer.Models.User member in team.Members)
                {
                    AddUnconfirmedBooking(db, slotList, member, resource, date, user);
                }
            }

            db.SaveChanges();
        }
Example #3
0
        /// <summary>
        /// Adds a booking to the database
        /// </summary>
        /// <param name="booking">The booking to be added</param>
        public void AddBooking(Booking booking)
        {
            var db = new ReScrumEntities();

            var slot = db.Slots.Where(s => s.SlotId == booking.Slot.SlotId).FirstOrDefault();
            var user = db.Users.Where(u => u.UserId == booking.User.UserId).FirstOrDefault();

            //check if a current booking exist for the user, date and time slot
            var newBooking = db.Booking.Where(b => b.User.UserId == user.UserId &&
                                              b.Slot.SlotId == slot.SlotId &&
                                              b.Date == booking.Date).FirstOrDefault();

            //if not create a new booking parameter
            if (newBooking == null)
            {
                newBooking = new DataLayer.Models.Booking();
            }

            //set/update the booking values
            newBooking.Date     = booking.Date;
            newBooking.Slot     = slot;
            newBooking.Resource = db.Resources.Where(r => r.ResourceId == booking.Resource.ResourceId).FirstOrDefault();
            newBooking.User     = user;
            newBooking.BookedBy = user;

            //if it is a new booking add it (creating new guid id), else the exisitng booking will be updated => no double booking
            if (newBooking.BookingId == null)
            {
                db.Booking.Add(newBooking);
            }

            db.SaveChanges();
        }
Example #4
0
        /// <summary>
        /// Updates an existing slot
        /// </summary>
        /// <param name="data">The new slot details</param>
        public void UpdateSlot(Slot data)
        {
            var db = new ReScrumEntities();

            var slot = db.Slots.Where(u => u.SlotId == data.SlotId).FirstOrDefault();

            slot.Time = data.Time;

            db.SaveChanges();
        }
Example #5
0
        /// <summary>
        /// Deletes an existing slot from the database
        /// </summary>
        /// <param name="data">The slot to be deleted</param>
        public void DeleteSlot(Guid?slotId)
        {
            var db = new ReScrumEntities();

            var slot = db.Slots.Where(u => u.SlotId == slotId).FirstOrDefault();

            slot.CancellationDate = DateTime.Today;

            db.SaveChanges();
        }
Example #6
0
        /// <summary>
        /// Deletes a booking from the database
        /// </summary>
        /// <param name="bookingId">The id of the booking to be removed</param>
        public void DeleteBooking(Guid?bookingId)
        {
            var db = new ReScrumEntities();

            var booking = db.Booking.Where(b => b.BookingId == bookingId).FirstOrDefault();

            db.Booking.Remove(booking);

            db.SaveChanges();
        }
Example #7
0
        /// <summary>
        /// Deletes an existing team from the database
        /// </summary>
        /// <param name="data">The team to be deleted</param>
        public void DeleteTeam(Guid?teamId)
        {
            var db = new ReScrumEntities();

            var team = db.Teams.Where(u => u.TeamId == teamId).FirstOrDefault();

            db.Teams.Remove(team);

            db.SaveChanges();
        }
Example #8
0
        /// <summary>
        /// Deletes a resource from the database
        /// </summary>
        /// <param name="data">The resource to be deleted</param>
        public void DeleteResource(Guid?resourceId)
        {
            var db = new ReScrumEntities();

            var resource = db.Resources.Where(u => u.ResourceId == resourceId).FirstOrDefault();

            resource.CancellationDate = DateTime.Today;

            db.SaveChanges();
        }
Example #9
0
        /// <summary>
        /// Updates an existing team
        /// </summary>
        /// <param name="data">The new team details</param>
        public void UpdateTeam(Team data)
        {
            var db = new ReScrumEntities();

            var team = db.Teams.Where(u => u.TeamId == data.TeamId).FirstOrDefault();

            team.TeamId = data.TeamId;
            team.Name   = data.Name;
            team.Colour = data.Colour;

            db.SaveChanges();
        }
Example #10
0
        /// <summary>
        /// Adds a user to the team
        /// </summary>
        /// <param name="data">The teamId and the new userId</param>
        public void AddMember(Guid?teamId, Guid?userId)
        {
            var db = new ReScrumEntities();

            var team = db.Teams.Where(t => t.TeamId == teamId).FirstOrDefault();

            var user = db.Users.Where(t => t.UserId == userId).FirstOrDefault();

            team.Members.Add(user);

            db.SaveChanges();
        }
Example #11
0
        /// <summary>
        /// Adds a slot to the database
        /// </summary>
        /// <param name="slot">The new slot to be added</param>
        public void AddSlot(Slot slot)
        {
            var db = new ReScrumEntities();

            var newslot = new DataLayer.Models.Slot
            {
                SlotId = slot.SlotId,
                Time   = slot.Time
            };

            db.Slots.Add(newslot);

            db.SaveChanges();
        }
Example #12
0
        /// <summary>
        /// Adds a team to the database
        /// </summary>
        /// <param name="team">The new team to be added</param>
        public void AddTeam(Team team)
        {
            var db = new ReScrumEntities();

            var newTeam = new DataLayer.Models.Team
            {
                TeamId = team.TeamId,
                Name   = team.Name,
                Colour = team.Colour,
            };

            db.Teams.Add(newTeam);

            db.SaveChanges();
        }
Example #13
0
        /// <summary>
        /// Updates an existing resource
        /// </summary>
        /// <param name="data">The new resource details</param>
        public void UpdateResource(Resource data)
        {
            var db = new ReScrumEntities();

            var resource = db.Resources.Where(u => u.ResourceId == data.ResourceId).FirstOrDefault();

            resource.ResourceId       = data.ResourceId;
            resource.Name             = data.Name;
            resource.Description      = data.Description;
            resource.Category         = data.Category;
            resource.Capacity         = data.Capacity;
            resource.Location         = data.Location;
            resource.CancellationDate = data.CancellationDate;

            db.SaveChanges();
        }
Example #14
0
        /// <summary>
        /// Adds attendees to an existing group booking
        /// </summary>
        /// <param name="bookingId">The booking the users should be added to</param>
        /// <param name="userId">The attendee to be added</param>
        public void AddAttendeeToGroupBooking(Guid?bookingId, Guid?userId)
        {
            var db = new ReScrumEntities();

            var booking = db.Booking.Where(b => b.BookingId == bookingId).FirstOrDefault();

            var slots = new List <DataLayer.Models.Slot>();

            slots.Add(booking.Slot);

            var attendee = db.Users.Where(u => u.UserId == userId).FirstOrDefault();

            AddUnconfirmedBooking(db, slots, attendee, booking.Resource, booking.Date, booking.BookedBy);

            db.SaveChanges();
        }
Example #15
0
        /// <summary>
        /// Adds a block of bookings to the database
        /// </summary>
        /// <param name="startDate">The start date</param>
        /// <param name="endDate">The end date</param>
        /// <param name="startTime">The start time</param>
        /// <param name="endTime">The end time</param>
        /// <param name="resourceId">The resource</param>
        /// <param name="userId">The user</param>
        public void AddBlockBooking(DateTime startDate, DateTime endDate, Guid?startTime, Guid?endTime, Guid?resourceId, Guid?userId)
        {
            var db = new ReScrumEntities();

            var startSlot = db.Slots.Where(s => s.SlotId == startTime).FirstOrDefault();
            var endSlot   = db.Slots.Where(s => s.SlotId == endTime).FirstOrDefault();
            var user      = db.Users.Where(u => u.UserId == userId).FirstOrDefault();
            var resource  = db.Resources.Where(r => r.ResourceId == resourceId).FirstOrDefault();

            var slotList = db.Slots.Where(s => s.StartTime >= startSlot.StartTime &&
                                          s.EndTime <= endSlot.EndTime).ToList();

            var date = startDate;

            //for every date in the date range given
            while (date <= endDate)
            {
                foreach (DataLayer.Models.Slot slot in slotList)
                {
                    //check if a booking exist for the user on the given date and time
                    var booking = db.Booking.Where(b => b.User.UserId == user.UserId &&
                                                   b.Slot.SlotId == slot.SlotId &&
                                                   b.Date == date).FirstOrDefault();
                    //if no booking exists create a new booking object
                    if (booking == null)
                    {
                        booking = new DataLayer.Models.Booking();
                    }

                    //Add or update booking values
                    booking.Date     = date;
                    booking.Slot     = slot;
                    booking.Resource = resource;
                    booking.User     = user;
                    booking.BookedBy = user;

                    //if a new booking was created add it to the database(giving a new guid id), else update the existing booking
                    if (booking.BookingId == null)
                    {
                        db.Booking.Add(booking);
                    }
                }
                date = date.AddDays(1);
            }

            db.SaveChanges();
        }
Example #16
0
        /// <summary>
        /// Adds an uncomfirmed booking for to the database
        /// </summary>
        /// <param name="db">The database instance</param>
        /// <param name="slots">The time slots for the booking</param>
        /// <param name="user">The user</param>
        /// <param name="resource">The resource</param>
        /// <param name="date">The date</param>
        /// <param name="bookedBy">The person who made the group booking</param>
        public void AddUnconfirmedBooking(ReScrumEntities db, List <DataLayer.Models.Slot> slots, DataLayer.Models.User user, DataLayer.Models.Resource resource, DateTime date, DataLayer.Models.User bookedBy)
        {
            foreach (DataLayer.Models.Slot slot in slots)
            {
                var booking = new DataLayer.Models.UnconfirmedBooking();

                booking.Date     = date;
                booking.Slot     = slot;
                booking.Resource = resource;
                booking.User     = user;
                booking.BookedBy = bookedBy;

                db.UnconfirmedBooking.Add(booking);
            }

            db.SaveChanges();
        }
Example #17
0
        /// <summary>
        /// Deletes an existing user from the database
        /// </summary>
        /// <param name="data">The user to be deleted</param>
        public void DeleteUser(Guid?userId)
        {
            var db = new ReScrumEntities();

            var user = db.Users.Where(u => u.UserId == userId).FirstOrDefault();

            user.CancellationDate = DateTime.Today;

            var teams = user.Teams.ToList();

            foreach (DataLayer.Models.Team team in teams)
            {
                team.Members.Remove(user);
            }

            db.SaveChanges();
        }
Example #18
0
        /// <summary>
        /// Updates an existing user
        /// </summary>
        /// <param name="data">The new user details</param>
        public void UpdateUser(User data)
        {
            var db = new ReScrumEntities();

            var user = db.Users.Where(u => u.UserId == data.UserId).FirstOrDefault();

            user.EmployeeNumber   = data.EmployeeNumber;
            user.Forename         = data.Forename;
            user.Surname          = data.Surname;
            user.Email            = data.Email;
            user.JobTitle         = data.JobTitle;
            user.IsLineManager    = data.IsLineManager;
            user.IsAdministrator  = data.IsAdministrator;
            user.CancellationDate = data.CancellationDate;

            db.SaveChanges();
        }
Example #19
0
        /// <summary>
        /// Adds a new resource to the database
        /// </summary>
        /// <param name="resource">The new resource to be added</param>
        public void AddResource(Resource resource)
        {
            var db = new ReScrumEntities();

            var newResource = new DataLayer.Models.Resource
            {
                ResourceId  = resource.ResourceId,
                Name        = resource.Name,
                Description = resource.Description,
                Category    = resource.Category,
                Capacity    = resource.Capacity,
                Location    = resource.Location,
            };

            db.Resources.Add(newResource);

            db.SaveChanges();
        }
Example #20
0
        /// <summary>
        /// Removed the unconformed booking and adds it to the booking table
        /// </summary>
        /// <param name="unconfirmedBookingId">The unconfirmed booking</param>
        public void ConfirmBooking(Guid?unconfirmedBookingId)
        {
            var db = new ReScrumEntities();

            //get the unconfirmed booking
            var unconfirmedBooking = db.UnconfirmedBooking.Where(b => b.UnconfirmedBookingId == unconfirmedBookingId).FirstOrDefault();

            //check to see if the user already has a booking for the date and time given
            var newBooking = db.Booking.Where(b => b.User.UserId == unconfirmedBooking.User.UserId &&
                                              b.Slot.SlotId == unconfirmedBooking.Slot.SlotId &&
                                              b.Date == unconfirmedBooking.Date).FirstOrDefault();

            //if no booking exists create a new bookng object, else the exisitng booking will be updated
            if (newBooking == null)
            {
                newBooking = new DataLayer.Models.Booking();
            }

            //add or update booking object
            newBooking.Date         = unconfirmedBooking.Date;
            newBooking.Slot         = unconfirmedBooking.Slot;
            newBooking.Resource     = unconfirmedBooking.Resource;
            newBooking.User         = unconfirmedBooking.User;
            newBooking.BookedBy     = unconfirmedBooking.BookedBy;
            newBooking.GroupBooking = true;

            //if it is a new booking add it to the database (give a new guid id), else update the existing booking
            if (newBooking.BookingId == null)
            {
                db.Booking.Add(newBooking);
            }

            //Remove the unconfirmed booking
            db.UnconfirmedBooking.Remove(unconfirmedBooking);

            db.SaveChanges();
        }
Example #21
0
        /// <summary>
        /// Adds bookings for the users for all of the time slots not already booked
        /// </summary>
        /// <param name="date">The start date</param>
        /// <param name="userId">The user</param>
        /// <returns>True if a resource is avaible and booking was successful, false otherwise</returns>
        public bool AutoBook(DateTime date, Guid?userId)
        {
            var db = new ReScrumEntities();

            //get the user
            var user = db.Users.Where(u => u.UserId == userId).FirstOrDefault();

            //get all active slots
            var slotList = db.Slots.Where(s => s.CancellationDate == null).ToList();

            //find the end date
            var endDate = date.AddDays(4);

            //find the start time slot
            var startSlot = slotList.First();

            foreach (DataLayer.Models.Slot slot in slotList)
            {
                if (startSlot.StartTime.CompareTo(slot.StartTime) == 1)
                {
                    startSlot = slot;
                }
            }

            //find the end time slot
            var endSlot = slotList.Last();

            foreach (DataLayer.Models.Slot slot in slotList)
            {
                if (endSlot.EndTime.CompareTo(slot.EndTime) == -1)
                {
                    endSlot = slot;
                }
            }

            //find resource that is available all week
            var resourceList = GetAvailableResourcesForBlockBooking(date, endDate, startSlot.SlotId, endSlot.SlotId).ToList();

            //get the resource with the smallest capacity
            if (resourceList.Count < 1)
            {
                return(false);
            }
            var resource = resourceList.OrderBy(r => r.Capacity).First();

            //add a booking for every time slot that is not already booked in the week => does NOT override existing bookings
            while (date <= endDate)
            {
                foreach (DataLayer.Models.Slot slot in slotList)
                {
                    var booking = db.Booking.Where(b => b.User.UserId == user.UserId &&
                                                   b.Slot.SlotId == slot.SlotId &&
                                                   b.Date == date).FirstOrDefault();

                    //Do not want to override existing bookings in auto functionality
                    if (booking == null)
                    {
                        booking = new DataLayer.Models.Booking()
                        {
                            Date     = date,
                            Slot     = slot,
                            Resource = db.Resources.Where(r => r.ResourceId == resource.ResourceId).FirstOrDefault(),
                            User     = user,
                            BookedBy = user,
                        };
                        db.Booking.Add(booking);
                    }
                }
                date = date.AddDays(1);
            }

            db.SaveChanges();
            return(true);
        }