コード例 #1
0
        /// <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);
        }