/// <summary> /// Reourniert eine Liste von Räumen die in einem in einem Zeitraum frei sind mit der gesuchten Art und Ausstattung /// </summary> /// <param name="startdatum"></param> /// <param name="enddatum"></param> /// <param name="art_id"></param> /// <param name="ausstattung"></param> /// <returns></returns> public static List <Raum> GesuchteRaeume(DateTime startdatum, DateTime enddatum, int art_id, int[] ausstattung) { log.Info("RaumVerwaltung - GesuchteRaueme"); List <Raum> raeume = new List <Raum>(); List <Raum> gesuchteRaeume = new List <Raum>(); List <Raum> temp = new List <Raum>(); try { using (var context = new Innovation4AustriaEntities()) { List <Buchung> buchungen = new List <Buchung>(); List <Raum> belegteRaeume = new List <Raum>(); List <Buchungsdetails> buchungsdetails = context.AlleBuchungsdetails.Where(x => x.Datum >= startdatum && x.Datum <= enddatum).ToList(); raeume = context.AlleRaeume.Where(x => x.Art_id == art_id).Include(y => y.Art).ToList(); if (buchungsdetails != null) { foreach (var buchungsdetail in buchungsdetails) { Buchung buchung = context.AlleBuchungen.Where(x => x.Id == buchungsdetail.Buchung_id).FirstOrDefault(); buchungen.Add(buchung); } } if (buchungen != null) { foreach (var buchung in buchungen) { Raum belegterRaum = context.AlleRaeume.Where(x => x.Id == buchung.Raum_id).FirstOrDefault(); belegteRaeume.Add(belegterRaum); } } // hier wird nach der Art gefiltert, ist der Raum schon in den Zeitraum vergeben, wird er von den anzuzeigenden Räumen entfernt if (belegteRaeume != null) { foreach (var belegterRaum in belegteRaeume) { raeume.RemoveAll(x => x.Id == belegterRaum.Id); } } // hier wird nach der Ausstattung gefiltert. // wenn die Anzahl (in alle AlleRaum_Ausstattungen) Ausstattungs_Id gleich groß ist wie die in ausstattung[], dann soll es in die Liste aufgenommen werden raeume = raeume.Where(x => x.AlleRaum_Ausstattungen.Select(y => y.Ausstattungs_Id) .Intersect(ausstattung).Count() == ausstattung.Count()).ToList(); } } catch (Exception ex) { log.Error("RaumVerwaltung - GesuchteRaeume - DB-Verbindung fehlgeschlagen"); if (ex.InnerException != null) { log.Info(ex.InnerException); } } return(raeume); }