public ActionResult Reserve(int?roomId, string Date) { RoomSystem.Models.ReserveModel reserveModel = new RoomSystem.Models.ReserveModel(); List <Models.Rooms> rooms = new List <Models.Rooms>(); using (Models.RoomSystemEntities db = new Models.RoomSystemEntities()) { rooms = (from s in db.Rooms where s.Enable select s).ToList(); } DateTime lastDate = DateTime.Today.AddDays(1); DateTime date = lastDate; if (Date != null && Date.Length > 0) { date = DateTime.ParseExact(Date, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); //date = date.AddDays(AddDate); if (date < lastDate) { date = lastDate; } } List <RoomSystem.Models.SessionModel> sessions = new List <RoomSystem.Models.SessionModel>(); if (roomId != null) { using (Models.RoomSystemEntities db = new Models.RoomSystemEntities()) { Models.ReservationCenters center = (from s in db.ReservationCenters select s).First(); // Models.Rooms room = rooms.Where(x => x.Id == roomId).First(); if (center != null) { bool isWeekend = date.DayOfWeek == DayOfWeek.Sunday || date.DayOfWeek == DayOfWeek.Saturday; TimeSpan openTime = isWeekend ? center.WeekendOpenTime : center.WeekdaysOpenTime; TimeSpan closeTime = isWeekend ? center.WeekendCloseTime : center.WeekdaysCloseTime; TimeSpan interval = new TimeSpan(0, center.TimePerTimePeriod, 0); List <int> borrowedSessionList = (from s in db.Reservations where s.RoomId == roomId && s.Date == date && !s.Disable select s.SessionNo).ToList(); int i = 0; for (TimeSpan startTime = openTime, endTime = startTime.Add(interval); startTime < closeTime; startTime = endTime, endTime = startTime.Add(interval)) { sessions.Add(new RoomSystem.Models.SessionModel(startTime, endTime <= closeTime ? endTime : closeTime, borrowedSessionList.Contains(i), i)); i++; } } } } reserveModel.Date = date; reserveModel.Rooms = rooms; reserveModel.WantToReserve = new bool[sessions.Count].ToList(); reserveModel.Session = sessions; reserveModel.RoomId = roomId; return(View(reserveModel)); }
public ActionResult Reserve(RoomSystem.Models.ReserveModel reserveModel) { string date = string.Format("{0:yyyy-MM-dd}", reserveModel.Date); List <string> borrower = new List <string>(); if (reserveModel.BorrowList != null && reserveModel.BorrowList != "") { borrower = reserveModel.BorrowList.Split(';').Distinct().ToList(); foreach (var email in borrower) { if (!IsValidEmail(email)) { return(Reserve(reserveModel.RoomId, date)); } } } string ASPNetUserID = User.Identity.GetUserId(); using (Models.RoomSystemEntities db = new Models.RoomSystemEntities()) { //var loginInfo = await Net.AuthenticationManager.GetExternalLoginInfoAsync(); //loginInfo.Email if (reserveModel.RoomId == null) { return(Reserve(reserveModel.RoomId.Value, string.Format("{0:yyyy-MM-dd}", reserveModel.Date))); } Models.Rooms room = (from s in db.Rooms where reserveModel.RoomId.Value == s.Id select s).FirstOrDefault(); if (room.Id != reserveModel.RoomId.Value || !(borrower.Count + 1 >= room.MinNumberOfUsers && borrower.Count < room.MaxNumberOfUsers)) { return(Reserve(reserveModel.RoomId, date)); } int i = 0; var Reservations = (from s in db.Reservations where s.RoomId == reserveModel.RoomId && s.Date == reserveModel.Date && !s.Disable select s.SessionNo).ToList(); foreach (var wantToReserve in reserveModel.WantToReserve) { if (wantToReserve && !Reservations.Contains(i)) { Models.Reservations reservation = new Models.Reservations(); reservation.BorrowerList = ""; reservation.Disable = false; reservation.AspNetUserId = ASPNetUserID; reservation.RoomId = reserveModel.RoomId.Value; reservation.SessionNo = i; reservation.Date = reserveModel.Date; reservation.BorrowerList = string.Join(";", borrower); db.Reservations.Add(reservation); } i++; } db.SaveChanges(); System.Models.AspNetUsers user = (from s in db.AspNetUsers where s.Id == ASPNetUserID select s).First(); string subject = "已向軟工作業會議預約系統預約會議室"; string body = string.Format("{0}:\n您已預約 r {1} 會議室,於 {2:yyyy-MM-dd},但這是軟工作業,所以沒有會議室可以用喔", user.UserName, room.Id, reserveModel.Date); SendEmail(user.Email, user.UserName, subject, body); } return(Reserve(reserveModel.RoomId.Value, string.Format("{0:yyyy-MM-dd}", reserveModel.Date))); }