public PartialViewResult RoomPlan(string date) { var day = string.IsNullOrEmpty(date) ? DateTime.Today : DateTime.ParseExact(date, "dd.MM.yyyy", null); var nextDay = day.AddDays(1); var org = GetMyOrganisation(); var model = new List <RoomActivityModel>(); // Alle Aktivitäten, die in Räumen des aktuellen // Veranstalters stattfinden /* * var allActivities = Db.ActivityDates.Where(x => * x.Begin >= day && x.End < nextDay && * x.Rooms.Any(r => r.Assignments.Any(a => a.Organiser.Id == org.Id)) * ).ToList(); * * // oder * // Alle Räume, die durch Veranstaltungen belegt sind * var allRooms = Db.Rooms.Where(r => * r.Assignments.Any(a => a.Organiser.Id == org.Id) && * r.Dates.Any(x => x.Begin >= day && x.End < nextDay) * ) * .OrderBy(r => r.Number) * .ToList(); */ // Alle Räume des Veranstalters var allRooms = Db.Rooms.Where(r => r.Assignments.Any(a => a.Organiser.Id == org.Id)) .OrderBy(r => r.Number) .ToList(); foreach (var room in allRooms) { // Alle Termine in diesem Raum var allActivities = room.Dates.Where(x => x.Begin >= day && x.End < nextDay) .OrderBy(d => d.Begin) .ToList(); var roomModel = new RoomActivityModel { Room = room, Dates = allActivities }; model.Add(roomModel); } return(PartialView("_RoomPlan", model)); }
public FileResult RoomPlanData(string date) { var day = string.IsNullOrEmpty(date) ? DateTime.Today : DateTime.ParseExact(date, "dd.MM.yyyy", null); var nextDay = day.AddDays(1); var org = GetMyOrganisation(); var model = new List <RoomActivityModel>(); // Alle Räume des Veranstalters var allRooms = Db.Rooms.Where(r => r.Assignments.Any(a => a.Organiser.Id == org.Id)) .OrderBy(r => r.Number) .ToList(); foreach (var room in allRooms) { // Alle Termine in diesem Raum var allActivities = room.Dates.Where(x => x.Begin >= day && x.End < nextDay) .OrderBy(d => d.Begin) .ToList(); var roomModel = new RoomActivityModel { Room = room, Dates = allActivities }; model.Add(roomModel); } var ms = new MemoryStream(); var writer = new StreamWriter(ms, Encoding.Default); writer.Write( "Raum;Von;Bis;Bezeichnung;Dozenten;Status"); writer.Write(Environment.NewLine); foreach (var room in model) { if (room.Dates.Any()) { foreach (var activityDate in room.Dates) { writer.Write(room.Room.Number); writer.Write(";"); writer.Write(activityDate.Begin.ToShortTimeString()); writer.Write(";"); writer.Write(activityDate.End.ToShortTimeString()); writer.Write(";"); writer.Write(activityDate.Activity.Name); writer.Write(";"); foreach (var dateHost in activityDate.Hosts) { writer.Write(dateHost.Name); if (dateHost != activityDate.Hosts.Last()) { writer.Write(", "); } } writer.Write(";"); if (activityDate.Occurrence != null && activityDate.Occurrence.IsCanceled) { writer.Write("abgesagt"); } writer.Write(Environment.NewLine); } } else { writer.Write(room.Room.Number); writer.Write(";"); writer.Write(";;;;keine Belegung"); writer.Write(Environment.NewLine); } } writer.Flush(); writer.Dispose(); var sb = new StringBuilder(); sb.Append("Belegungsplan"); sb.Append("_"); sb.Append(day.ToString("yyyyMMdd")); sb.Append(".csv"); return(File(ms.GetBuffer(), "text/csv", sb.ToString())); }