//public static void CheckReservations20150310(this Controller controller, IList<TableAvailability> availList, IList<FloorTableBlock> blockList, // FloorTable table, string duration, DateTime? startTime, DateTime? endTime, int? shiftId, out int coverCount) //{ // coverCount = 0; // var design = table.TableDesign; // var TableName = GetMatchedTagsFromHtml(design, String.Format("<h3(.*?)>(.*?)</h3>")).FirstOrDefault(); // if (!string.IsNullOrEmpty(TableName)) // { // IQueryable<Reservation> reservation = table.Reservations.Where(r => !r.IsDeleted).AsQueryable(); // IQueryable<Reservation> mergedreservation = table.MergedTables.Select(m => m.MergedFloorTable).SelectMany(mt => mt.Reservations) // .Where(r => !r.IsDeleted).AsQueryable(); // IQueryable<Reservation> upcomingReservation = reservation.AsQueryable(); // IQueryable<Reservation> upcomingMergedreservation = mergedreservation.AsQueryable(); // if (!shiftId.HasValue) // { // if (startTime.HasValue) // { // if (startTime.HasValue && endTime.HasValue) // { // var preStart = startTime.Value.AddMinutes(90); // reservation = reservation.Where(r => r.TimeForm <= startTime.Value && r.TimeTo >= endTime.Value); // mergedreservation = mergedreservation.Where(r => r.TimeForm <= startTime.Value && r.TimeForm.AddMinutes(r.Duration.GetMinutesFromDuration()) >= endTime.Value); // upcomingReservation = upcomingReservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= startTime.Value); // upcomingMergedreservation = upcomingMergedreservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= startTime.Value); // } // else // { // var start = startTime.Value.Date.AddTicks(DateTime.UtcNow.ToClientTime().TimeOfDay.Ticks); // var preStart = start.AddMinutes(90); // reservation = reservation.Where(r => r.TimeForm <= start && r.TimeTo >= start); // mergedreservation = mergedreservation.Where(r => r.TimeForm <= start && r.TimeTo >= start); // upcomingReservation = upcomingReservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= start); // upcomingMergedreservation = upcomingMergedreservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= start); // } // } // else // { // var now = DateTime.UtcNow.ToClientTime(); // var preStart = now.AddMinutes(90); // reservation = reservation.Where(r => r.TimeForm <= now && r.TimeTo >= now); // mergedreservation = mergedreservation.Where(r => r.TimeForm <= now && r.TimeTo >= now); // upcomingReservation = upcomingReservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= now); // upcomingMergedreservation = upcomingMergedreservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= now); // } // } // else // { // if (startTime.HasValue) // { // var preStart = startTime.Value.AddMinutes(90); // reservation = reservation.Where(r => r.ReservationDate == startTime.Value.Date); // mergedreservation = mergedreservation.Where(r => r.ReservationDate == startTime.Value.Date); // upcomingReservation = upcomingReservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= startTime.Value); // upcomingMergedreservation = upcomingMergedreservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= startTime.Value); // } // else // { // var now = DateTime.UtcNow.ToClientTime(); // var preStart = now.AddMinutes(90); // reservation = reservation.Where(r => r.ReservationDate == DateTime.UtcNow.ToClientTime().Date); // mergedreservation = mergedreservation.Where(r => r.ReservationDate == DateTime.UtcNow.ToClientTime().Date); // upcomingReservation = upcomingReservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= now); // upcomingMergedreservation = upcomingMergedreservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= now); // } // if (shiftId.Value != 0) // { // reservation = reservation.Where(r => r.FoodMenuShiftId == shiftId.Value); // mergedreservation = mergedreservation.Where(r => r.FoodMenuShiftId == shiftId.Value); // } // } // // check if status is FINISHED, CANCELLED, CANCELLED2 // var rejectedStatus = new List<long?>() // { // ReservationStatus.Finished, // ReservationStatus.Cancelled // //ReservationStatus.Cancelled_2 // }; // var reservationList = reservation.Where(r => !rejectedStatus.Contains(r.StatusId)).ToList(); // var mergedreservationList = mergedreservation.Where(r => !rejectedStatus.Contains(r.StatusId)).ToList(); // var upcomingReservationList = upcomingReservation.Where(r => !rejectedStatus.Contains(r.StatusId)).ToList(); // var upcomingMergedReservationList = upcomingMergedreservation.Where(r => !rejectedStatus.Contains(r.StatusId)).ToList(); // upcomingReservationList.AddRange(upcomingMergedReservationList); // // Ends here // if (reservationList.Count > 0 || mergedreservationList.Count > 0) // { // var allRes = new List<Reservation>(); // if (reservationList.Count() > 0) // allRes.AddRange(reservationList); // if (mergedreservationList.Count() > 0) // allRes.AddRange(mergedreservationList); // allRes = allRes.OrderBy(r => r.TimeForm).ToList(); // //table.TableDesign = design.Replace(TableName, TableName + "<img alt=\"\" src=\"/images/red-s.png\" class=\"table-img\">"); // design = design.Replace(TableName, TableName + "<img alt=\"\" src=\"/images/red-s.png\" class=\"table-img\">"); // if (allRes.First().FloorTableId > 0) // { // var regex = new Regex(@"([\w-]+)\s*:\s*([^;]+)"); // var match = regex.Match(GetMatchedTagsFromHtml(design, String.Format("<div[^>]*?class=([\"'])[^>]*{0}[^>]*\\1[^>]*>", "table-main")).FirstOrDefault()); // while (match.Success) // { // var key = match.Groups[1].Value; // var value = match.Groups[2].Value; // if (key == "top") // { // design = design.Replace(value, allRes.First().TablePositionTop); // } // if (key == "left") // { // design = design.Replace(value, allRes.First().TablePositionLeft); // } // match = match.NextMatch(); // } // } // var popup = controller.RenderPartialViewToString("~/Views/Floor/ReservationListPartial.cshtml", allRes); // StringBuilder designer = new StringBuilder(); // designer.Append(design.Substring(0, design.LastIndexOf("</div>"))); // designer.Append(popup + "</div>"); // table.TableDesign = designer.ToString(); // coverCount = allRes.Sum(r => r.Covers); // } // else if (upcomingReservationList.Count > 0) // { // design = design.Replace(TableName, TableName + "<img alt=\"\" src=\"/images/upcom-s.png\" class=\"table-img\">"); // var popup = controller.RenderPartialViewToString("~/Views/Floor/ReservationListPartial.cshtml", upcomingReservationList); // StringBuilder designer = new StringBuilder(); // designer.Append(design.Substring(0, design.LastIndexOf("</div>"))); // designer.Append(popup + "</div>"); // table.TableDesign = designer.ToString(); // } // else // { // if (endTime.HasValue && !string.IsNullOrWhiteSpace(duration)) // endTime = startTime.Value.AddMinutes(duration.GetMinutesFromDuration()); // if (startTime.HasValue && endTime.HasValue && (availList.CheckAvailStatus(startTime.Value.Date, startTime.Value, endTime.Value, table, 2) // || blockList.IsTableBlocked(table.FloorTableId, startTime.Value, endTime.Value))) // table.TableDesign = design.Replace(TableName, TableName + "<img alt=\"\" src=\"/images/free-s.png\" class=\"table-img\">"); // else // table.TableDesign = design.Replace(TableName, TableName + "<img alt=\"\" src=\"/images/green-a.png\" class=\"table-img\">"); // } // } //} public static void CheckReservations20150622(this Controller controller, IList<Reservation> todayReservations, IList<TableAvailability> availList, IList<FloorTableBlock> blockList, FloorTable table, string duration, DateTime? startTime, DateTime? endTime, int? shiftId, out int coverCount) { coverCount = 0; var deafultTimeZoneTime = DateTime.UtcNow.ToDefaultTimeZone(controller.User.Identity.GetDatabaseName()); var design = table.TableDesign; var TableName = GetMatchedTagsFromHtml(design, String.Format("<h3(.*?)>(.*?)</h3>")).FirstOrDefault(); if (!string.IsNullOrEmpty(TableName)) { IList<Reservation> reservation = todayReservations.Where(r => r.FloorTableId == table.FloorTableId).ToList(); IList<Reservation> mergedreservation = todayReservations.Where(r => r.FloorTableId == 0 && r.MergedFloorTable.OrigionalTables.Any(t => t.FloorTableId == table.FloorTableId)).ToList(); IList<Reservation> upcomingReservation = reservation.ToList(); IList<Reservation> upcomingMergedreservation = mergedreservation.ToList(); if (!shiftId.HasValue) { if (startTime.HasValue) { if (startTime.HasValue && endTime.HasValue) { var preStart = startTime.Value.AddMinutes(90); reservation = reservation.Where(r => r.TimeForm <= startTime.Value && r.TimeTo >= endTime.Value).ToList(); mergedreservation = mergedreservation.Where(r => r.TimeForm <= startTime.Value && r.TimeForm.AddMinutes(r.Duration.GetMinutesFromDuration()) >= endTime.Value).ToList(); upcomingReservation = upcomingReservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= startTime.Value).ToList(); upcomingMergedreservation = upcomingMergedreservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= startTime.Value).ToList(); } else { var start = startTime.Value.Date.AddTicks(deafultTimeZoneTime.TimeOfDay.Ticks); var preStart = start.AddMinutes(90); reservation = reservation.Where(r => r.TimeForm <= start && r.TimeTo >= start).ToList(); mergedreservation = mergedreservation.Where(r => r.TimeForm <= start && r.TimeTo >= start).ToList(); upcomingReservation = upcomingReservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= start).ToList(); upcomingMergedreservation = upcomingMergedreservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= start).ToList(); } } else { var now = deafultTimeZoneTime; var preStart = now.AddMinutes(90); reservation = reservation.Where(r => r.TimeForm <= now && r.TimeTo >= now).ToList(); mergedreservation = mergedreservation.Where(r => r.TimeForm <= now && r.TimeTo >= now).ToList(); upcomingReservation = upcomingReservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= now).ToList(); upcomingMergedreservation = upcomingMergedreservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= now).ToList(); } } else { if (startTime.HasValue) { var preStart = startTime.Value.AddMinutes(90); reservation = reservation.Where(r => r.ReservationDate == startTime.Value.Date).ToList(); mergedreservation = mergedreservation.Where(r => r.ReservationDate == startTime.Value.Date).ToList(); upcomingReservation = upcomingReservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= startTime.Value).ToList(); upcomingMergedreservation = upcomingMergedreservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= startTime.Value).ToList(); } else { var now = deafultTimeZoneTime; var preStart = now.AddMinutes(90); reservation = reservation.Where(r => r.ReservationDate == now.Date).ToList(); mergedreservation = mergedreservation.Where(r => r.ReservationDate == now.Date).ToList(); upcomingReservation = upcomingReservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= now).ToList(); upcomingMergedreservation = upcomingMergedreservation.Where(r => r.TimeForm <= preStart && r.TimeForm >= now).ToList(); } if (shiftId.Value != 0) { reservation = reservation.Where(r => r.FoodMenuShiftId == shiftId.Value).ToList(); mergedreservation = mergedreservation.Where(r => r.FoodMenuShiftId == shiftId.Value).ToList(); } } // check if status is FINISHED, CANCELLED, CANCELLED2 var rejectedStatus = new List<long?>() { ReservationStatus.Finished, ReservationStatus.Cancelled //ReservationStatus.Cancelled_2 }; var reservationList = reservation.Where(r => !rejectedStatus.Contains(r.StatusId)).ToList(); var mergedreservationList = mergedreservation.Where(r => !rejectedStatus.Contains(r.StatusId)).ToList(); var upcomingReservationList = upcomingReservation.Where(r => !rejectedStatus.Contains(r.StatusId)).ToList(); var upcomingMergedReservationList = upcomingMergedreservation.Where(r => !rejectedStatus.Contains(r.StatusId)).ToList(); upcomingReservationList.AddRange(upcomingMergedReservationList); // Ends here if (reservationList.Count > 0 || mergedreservationList.Count > 0) { var allRes = new List<Reservation>(); if (reservationList.Count() > 0) allRes.AddRange(reservationList); if (mergedreservationList.Count() > 0) allRes.AddRange(mergedreservationList); allRes = allRes.OrderBy(r => r.TimeForm).ToList(); //table.TableDesign = design.Replace(TableName, TableName + "<img alt=\"\" src=\"/images/red-s.png\" class=\"table-img\">"); design = design.Replace(TableName, TableName + "<img alt=\"\" src=\"/images/red-s.png\" class=\"table-img\">"); if (allRes.First().FloorTableId > 0) { var regex = new Regex(@"([\w-]+)\s*:\s*([^;]+)"); var match = regex.Match(GetMatchedTagsFromHtml(design, String.Format("<div[^>]*?class=([\"'])[^>]*{0}[^>]*\\1[^>]*>", "table-main")).FirstOrDefault()); while (match.Success) { var key = match.Groups[1].Value; var value = match.Groups[2].Value; if (key == "top") { design = design.Replace(value, allRes.First().TablePositionTop); } if (key == "left") { design = design.Replace(value, allRes.First().TablePositionLeft); } match = match.NextMatch(); } } var popup = controller.RenderPartialViewToString("~/Views/Floor/ReservationListPartial.cshtml", allRes); StringBuilder designer = new StringBuilder(); designer.Append(design.Substring(0, design.LastIndexOf("</div>"))); designer.Append(popup + "</div>"); table.TableDesign = designer.ToString(); coverCount = allRes.Sum(r => r.Covers); } else if (upcomingReservationList.Count > 0) { design = design.Replace(TableName, TableName + "<img alt=\"\" src=\"/images/upcom-s.png\" class=\"table-img\">"); var popup = controller.RenderPartialViewToString("~/Views/Floor/ReservationListPartial.cshtml", upcomingReservationList); StringBuilder designer = new StringBuilder(); designer.Append(design.Substring(0, design.LastIndexOf("</div>"))); designer.Append(popup + "</div>"); table.TableDesign = designer.ToString(); } else { if (endTime.HasValue && !string.IsNullOrWhiteSpace(duration)) endTime = startTime.Value.AddMinutes(duration.GetMinutesFromDuration()); if (startTime.HasValue && endTime.HasValue && (availList.CheckAvailStatus(startTime.Value.Date, startTime.Value, endTime.Value, table, 2) || blockList.IsTableBlocked(table.FloorTableId, startTime.Value, endTime.Value))) table.TableDesign = design.Replace(TableName, TableName + "<img alt=\"\" src=\"/images/free-s.png\" class=\"table-img\">"); else table.TableDesign = design.Replace(TableName, TableName + "<img alt=\"\" src=\"/images/green-a.png\" class=\"table-img\">"); } } }