コード例 #1
0
 public void DeleteReservation(TvProgram program)
 {
     using (TvContext context = new TvContext())
     {
         TvProgram old = context.Programs.First(p => p.ProgramId == program.ProgramId);
         context.Entry(old).State                 = System.Data.Entity.EntityState.Modified;
         context.Entry(old).Entity.Reserved       = null;
         context.Entry(old).Entity.ReservedRoomId = null;
         context.SaveChanges();
     }
 }
コード例 #2
0
 public void DeleteProgram(TvProgram program)
 {
     if (program != null)
     {
         using (TvContext context = new TvContext())
         {
             TvProgram p = context.Programs.Find(program.ProgramId);
             context.Entry(p).State = System.Data.Entity.EntityState.Deleted;
             context.Programs.Remove(p);
             context.SaveChanges();
         }
     }
 }
コード例 #3
0
        /// <summary>
        /// TV műsor kimentése XML fájlba.
        /// </summary>
        /// <param name="filepath">Fájl teljes eléréi útvonala</param>
        /// <param name="from">Exportálás kezdő dátuma</param>
        /// <param name="to">Exportálás vége dátuma</param>
        /// <param name="channels">Csatornák, melyek exportálásra kerüljenek</param>
        public bool ExportTvPrograms(string filepath, DateTime from, DateTime to, List <string> channels)
        {
            DateTime         fromDate = from.Date;
            DateTime         toDate   = to.Date.AddDays(1);
            List <TvProgram> programs = new List <TvProgram>();
            XmlSerializer    ser      = new XmlSerializer(typeof(List <TvProgram>), new[] { typeof(TvProgram) });

            using (TvContext context = new TvContext())
            {
                using (StreamWriter sw = new StreamWriter(filepath))
                    foreach (string channel in channels)
                    {
                        List <TvProgram> thisChannelsPrograms = (from p in context.Programs
                                                                 where p.StartTime >= fromDate && p.EndTime <= toDate && p.TvChannel == channel
                                                                 select(TvProgram) p).ToList();
                        if (thisChannelsPrograms.Count > 0)
                        {
                            foreach (TvProgram program in thisChannelsPrograms)
                            {
                                programs.Add(new TvProgram()
                                {
                                    Title     = program.Title,
                                    Genre     = program.Genre,
                                    StartTime = program.StartTime,
                                    EndTime   = program.EndTime,
                                    TvChannel = program.TvChannel,
                                    AgeLimit  = program.AgeLimit
                                });
                            }
                        }
                    }
            }
            try
            {
                using (StreamWriter sw = new StreamWriter(filepath))
                {
                    if (programs.Count > 0)
                    {
                        ser.Serialize(sw, programs);
                    }
                    return(true);
                }
            }
            catch
            {
                return(false);
            }
        }
コード例 #4
0
        ///<summary>
        ///Visszaadja a Tv műsorokat egy List adatszerekezetben.
        ///</summary>
        public List <TvProgram> RetrieveTvPrograms(DateTime time, string channel, ProgramDisplay display, AgeLimit ageLimit)
        {
            using (TvContext context = new TvContext())
            {
                //Alap lekérés
                var shows = from p in context.Programs
                            where
                            System.Data.Entity.Core.Objects.EntityFunctions.DiffDays(p.StartTime, time) == 0
                            &&
                            (channel == null ? true : p.TvChannel == channel)
                            &&
                            ((p.AgeLimit & ageLimit) != 0)
                            select p;
                //Ha mindkettő be van pipálva akkor ne variáljunk.
                if (!((display & ProgramDisplay.OnlyFree) != 0 && (display & ProgramDisplay.OnlyReserved) != 0))
                {
                    //Szabad időpontok
                    if ((display & ProgramDisplay.OnlyFree) != 0)
                    {
                        shows = from p in shows
                                where p.Reserved == null
                                select p;
                    }
                    //Ffoglalt időpontok
                    if ((display & ProgramDisplay.OnlyReserved) != 0)
                    {
                        shows = from p in shows
                                where p.Reserved != null
                                select p;
                    }
                    //Ha egyik sincs kipipálva
                    if (display == 0)
                    {
                        shows = from p in shows
                                where false
                                select p;
                    }
                }

                //Tv Műsorok visszaadása
                List <TvProgram> programs = new List <TvProgram>();
                foreach (TvProgram item in shows)
                {
                    programs.Add(item);
                }
                return(programs);
            }
        }
コード例 #5
0
        //XMLTV fájl parse => TvProgram fájlba. DEV
        //[Obsolete("Ne használd. Az XMLTV nem ad elegendő paramértert ahhoz, hogy teljes értékű TvProgram példányt lehessen létrehozni", true)]
        //public List<TvProgram> ParseXmlTvFile(string filepath)
        //{
        //    List<TvProgram> programList = new List<TvProgram>();

        //    XmlDocument xml = new XmlDocument();
        //    xml.Load(filepath);
        //    foreach (XmlNode node in xml.DocumentElement.ChildNodes)
        //    {
        //        if (node.Name == "programme")
        //        {
        //            TvProgram newProgram = new TvProgram();
        //            foreach (XmlNode childNode in node.ChildNodes)
        //            {
        //                if (childNode.Name == "title")
        //                {
        //                    Console.WriteLine(childNode.InnerText);
        //                }
        //            }

        //            programList.Add(newProgram);
        //        }
        //    }
        //    return programList;
        //}
        public List <string> GetTvChannels()
        {
            List <string> channels = new List <string>();

            using (TvContext context = new TvContext())
            {
                var getChannels = from program in context.Programs
                                  group program by program.TvChannel into newGroup
                                  orderby newGroup.Key
                                  select newGroup;
                foreach (var ch in getChannels)
                {
                    channels.Add(ch.Key);
                }
            }
            return(channels);
        }
コード例 #6
0
 //TV program lefoglalása.
 /// <summary>
 /// TV program lefoglalása egy adott szobához
 /// </summary>
 /// <param name="program">Foglalandó műsor</param>
 /// <param name="room">Lefoglaló szoba</param>
 public static void ReserveTvProgram(TvProgram program, Room room)
 {
     using (TvContext context = new TvContext())
     {
         try
         {
             TvProgram prg = context.Programs.Find(program.ProgramId);
             Room      r   = context.Rooms.Find(room.RoomId);
             prg.Reserved = r;
             context.SaveChanges();
         }
         catch (Exception)
         {
             MessageBox.Show("Nem sikerült a foglalás.\nHiba lépett fel. Frissítsen és próbálja újra.", "Hiba.", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
 }
コード例 #7
0
        public object getPieStatistics(Stats stats)
        {
            using (TvContext context = new TvContext())
            {
                if (stats == Stats.ByGenre)
                {
                    Dictionary <TvProgramGenre, int> genreStats = new Dictionary <TvProgramGenre, int>();

                    var linq = from p in context.Programs
                               where p.Reserved != null
                               select p.Genre;

                    foreach (var item in linq)
                    {
                        foreach (var flag in GetFlags(item))
                        {
                            if (genreStats.ContainsKey(flag))
                            {
                                genreStats[flag]++;
                            }
                            else
                            {
                                genreStats.Add(flag, 1);
                            }
                        }
                    }
                    return(genreStats);
                }
                if (stats == Stats.ByTvChannel)
                {
                    var pl = from p in context.Programs
                             where p.Reserved != null
                             orderby p.TvChannel
                             group p by p.TvChannel into grp
                             select new { key = grp.Key, cnt = grp.Count() };
                    Dictionary <string, int> channelStats = new Dictionary <string, int>();
                    foreach (var item in pl)
                    {
                        channelStats.Add(item.key, item.cnt);
                    }
                    return(channelStats);
                }
                return(null);
            }
        }
コード例 #8
0
        public Tuple <DateTime, DateTime> GetFirstLastProgramDate()
        {
            Tuple <DateTime, DateTime> result;

            try
            {
                using (TvContext context = new TvContext())
                {
                    var minDate = (from d in context.Programs select d.StartTime).Min();
                    var maxDate = (from d in context.Programs select d.StartTime).Max();
                    result = new Tuple <DateTime, DateTime>(minDate, maxDate);
                }
            }
            catch (Exception)
            {
                result = new Tuple <DateTime, DateTime>(DateTime.Now, DateTime.Now);
            }
            return(result);
        }
コード例 #9
0
 /// <summary>
 /// Adott időintervallumon belül következő TV program visszaadása, HA VAN
 /// </summary>
 /// <param name="maxRemainingTime">Max. intervallum amin belül kell a műsor.</param>
 /// <returns></returns>
 public static TvProgram GetNextProgram(TimeSpan maxRemainingTime)
 {
     using (TvContext context = new TvContext())
     {
         try
         {
             var nextProgram = (from p in context.Programs
                                where p.StartTime > DateTime.Now && p.Reserved != null
                                select p).First();
             if ((nextProgram.StartTime - DateTime.Now) <= maxRemainingTime)
             {
                 return((TvProgram)nextProgram);
             }
             return(null);
         }
         catch
         {
             return(null);
         }
     }
 }
コード例 #10
0
 public Dictionary <DateTime, List <TvProgram> > getWatchedTvPrograms(DateTime fromDate, DateTime toDate)
 {
     fromDate = fromDate.Date;
     toDate   = toDate.Date.AddDays(1);
     using (TvContext context = new TvContext())
     {
         List <TvProgram> shows = (from p in context.Programs
                                   where p.Reserved != null && p.StartTime >= fromDate && p.EndTime <= toDate
                                   select p).ToList();
         Dictionary <DateTime, List <TvProgram> > watchDictionary = new Dictionary <DateTime, List <TvProgram> >();
         while (fromDate < toDate)
         {
             watchDictionary.Add(fromDate, new List <TvProgram>());
             fromDate = fromDate.AddDays(1);
         }
         foreach (TvProgram tvProgram in shows)
         {
             watchDictionary[tvProgram.StartTime.Date].Add(tvProgram);
         }
         return(watchDictionary);
     }
 }
コード例 #11
0
 public void AddTvProgram(TvProgram program)
 {
     if (this.ValidateProgram(program))
     {
         using (TvContext context = new TvContext())
         {
             if (program.ProgramId != 0)
             {
                 TvProgram old = context.Programs.First(p => p.ProgramId == program.ProgramId);
                 context.Entry(old).State = System.Data.Entity.EntityState.Modified;
                 context.Entry(old).CurrentValues.SetValues(program);
                 //Console.WriteLine(context.Entry(old).Entity.Title);
                 context.SaveChanges();
             }
             else
             {
                 context.Programs.Add(program);
                 context.SaveChanges();
             }
         }
     }
 }
コード例 #12
0
 public bool ValidateProgram(TvProgram program)
 {
     if (program.Title == "")
     {
         throw new TvProgramCreateEditException("Kötelező címet megadni.", TvProgramCreateEditExceptionDetails.EmptyField);
     }
     if (program.TvChannel == "")
     {
         throw new TvProgramCreateEditException("Kötelező TV csatornát megadni.", TvProgramCreateEditExceptionDetails.EmptyField);
     }
     if (program.Genre == 0)
     {
         throw new TvProgramCreateEditException("Kötelező legalább egy műfajt megadni.", TvProgramCreateEditExceptionDetails.EmptyField);
     }
     if (program.StartTime > program.EndTime)
     {
         throw new TvProgramCreateEditException("Nem kezdődhet később a műsor, mint ahogy vége van.", TvProgramCreateEditExceptionDetails.WrongDateRange);
     }
     using (TvContext context = new TvContext())
     {
         var collision = from p in context.Programs
                         where
                         p.TvChannel == program.TvChannel
                         &&
                         System.Data.Entity.Core.Objects.EntityFunctions.DiffDays(p.StartTime, program.StartTime) == 0
                         &&
                         p.StartTime <= program.StartTime
                         &&
                         p.EndTime > program.StartTime
                         &&
                         p.ProgramId != program.ProgramId
                         select p;
         if (collision.Count() > 0)
         {
             throw new TvProgramCreateEditException($"Ebben az időpontban már van felvéve Tv műsor\n{program.Title} {program.StartTime.TimeOfDay} - {program.EndTime.TimeOfDay}", TvProgramCreateEditExceptionDetails.Collision);
         }
         return(true);
     }
 }
コード例 #13
0
        private void InitializeComponent()
        {
            BackColor   = Color.White;
            Size        = new Size(383, 80);
            BorderStyle = BorderStyle.FixedSingle;
            labelTitle  = new Label()
            {
                Location    = new System.Drawing.Point(55, 4),
                Size        = new Size(257, 21),
                AutoSize    = true,
                MaximumSize = new Size(220, 21),
                Font        = new System.Drawing.Font("Segoe UI", 12, System.Drawing.FontStyle.Bold),
                Text        = program.Title
            };
            labelGenre = new Label()
            {
                Font        = new System.Drawing.Font("Segoe UI", 8, System.Drawing.FontStyle.Regular),
                Location    = new Point(56, 28),
                Size        = new Size(240, 30),
                AutoSize    = true,
                MaximumSize = new Size(240, 70),
                Text        = TvProgramManager.GetGenresAsString(program.Genre)
            };

            labelStartTime = new Label()
            {
                Font     = new System.Drawing.Font("Segoe UI", 14, System.Drawing.FontStyle.Bold),
                Location = new Point(-2, 3),
                Text     = program.StartTime.ToString("HH:mm")
            };
            labelTimeLength = new Label()
            {
                Font     = new System.Drawing.Font("Segoe UI", 8, System.Drawing.FontStyle.Bold),
                Location = new Point(3, 26),
                Text     = (program.EndTime - program.StartTime).TotalMinutes.ToString("0") + " perc"
            };
            labelStatus = new Label()
            {
                Location = new Point(280, 60),
                Font     = new System.Drawing.Font("Segoe UI", 8, System.Drawing.FontStyle.Bold),
                Visible  = false
            };
            pictureKorhatar = new PictureBox()
            {
                Image    = getAgeLimitPic(),
                Location = new Point(337, 10),
                Size     = new Size(32, 32)
            };
            buttonFoglalas = new Button()
            {
                Text      = "Foglalás",
                Location  = new Point(303, 52),
                BackColor = Control.DefaultBackColor,
                Visible   = false
            };
            elapsedTimeProgress = new ProgressBar()
            {
                Visible   = false,
                Location  = new Point(0, 0),
                Size      = new Size(383, 5),
                BackColor = Color.MediumVioletRed,
            };
            CheckProgramElapsedTime();

            //FOGLALÁS BEGINS
            using (TvContext context = new TvContext())
            {
                //Olyan műsorok lekérése, amelyek ugyanabban az időpontban vannak műsoron, mint ebbe a Controlba kapott műsor.
                //Olyan műsor ami foglalva van, hamarabb, vagy ugyanakkor kezdődik mint a kiválasztott és később van vége, mint ahogy a kiválasztott elkezdődne.
                var shows = from vizsgalt in context.Programs
                            where
                            vizsgalt.Reserved != null &&
                            (
                    (vizsgalt.StartTime <= program.StartTime && vizsgalt.EndTime > program.StartTime)
                    ||
                    (vizsgalt.StartTime >= program.StartTime && vizsgalt.EndTime <= program.EndTime)
                    ||
                    (vizsgalt.StartTime >= program.StartTime && vizsgalt.StartTime < program.EndTime)
                    ||
                    (vizsgalt.EndTime >= program.StartTime && vizsgalt.EndTime <= program.EndTime)
                            )
                            select vizsgalt;
                //Látható legyen a foglalás gomb. Minden más többi esetben csak eltüntetve lesz.
                if (room != null)
                {
                    if (program.StartTime >= DateTime.Now || program.StartTime <= DateTime.Now && program.EndTime >= DateTime.Now)
                    {
                        buttonFoglalas.Visible = true;
                    }
                }
                //Ha van olyan műsor amivel átfedésben van
                if (shows.Count() > 0)
                {
                    //Ha ütközik másik programmal, megnézzük, hogy önmaga is a foglalt műsorok között van.
                    bool isSelf = (from p in shows
                                   where p.ProgramId == program.ProgramId
                                   select p)
                                  .Count() > 0;

                    buttonFoglalas.Visible = false;

                    //Ha önmaga az éppen ütköző foglalt műsorok között van, akkor tudatjuk a felhasználóval, ez van az adott időpotban lefoglalva.
                    if (isSelf)
                    {
                        labelStatus.Text = "Lefoglalt";
                        System.Windows.Forms.ToolTip ttt = new System.Windows.Forms.ToolTip();
                        ttt.SetToolTip(labelStatus, "Ez a műsor már le van foglalva, így nézhető lesz.\nLefoglaló szoba: " + program.ReservedRoomId);
                    }
                    else
                    {
                        //Ebben az esetben a műsor nem foglalható le, mert ekkor másik lefoglalt műsor fut. Hogy a felhasználó tudja, hogy mi,
                        //jobb kattintásra context menüben megjelenik a műsor, rákattintva ahhoz a tv csatornához ugrik a program.
                        var reservedShows = from p in shows
                                            where p.ProgramId != program.ProgramId
                                            select p;

                        ContextMenuStrip cm = new ContextMenuStrip()
                        {
                            RenderMode = ToolStripRenderMode.System
                        };
                        //Alap foglalt műsor szöveg és egy divider.
                        ToolStripMenuItem menuItem = new ToolStripMenuItem()
                        {
                            Text = "Foglalt műsor", Enabled = false
                        };
                        cm.Items.Add(menuItem);
                        cm.Items.Add(new ToolStripSeparator());

                        //Ütköző műsor berakása a listába.
                        foreach (var show in reservedShows)
                        {
                            ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem()
                            {
                                Text = String.Format(
                                    "{0} {1}:{2}-{3}:{4} ({5})",
                                    show.Title,                           //0
                                    show.StartTime.Hour,                  //1
                                    show.StartTime.Minute.ToString("00"), //2
                                    show.EndTime.Hour,                    //3
                                    show.EndTime.Minute.ToString("00"),   //4
                                    show.TvChannel                        //5
                                    )
                            };
                            //Kattintásra elsütjük a SelectedProgramChanged eseményt, ami megváltoztatja a megjelenített csatornát
                            toolStripMenuItem.Click += (i, o) => { SelectedProgramChaned?.Invoke(this, new ProgramChangeEventArgs()
                                {
                                    Program = show
                                }); };
                            //És hozzá is adjuk a menühöz az elemet.
                            cm.Items.Add(toolStripMenuItem);
                        }
                        labelStatus.ContextMenuStrip = cm;
                        //Kis tooltip, hogy érthető legyen miért van kint a felirat.
                        System.Windows.Forms.ToolTip ttt = new System.Windows.Forms.ToolTip();
                        ttt.SetToolTip(labelStatus, "Ebben az időpontban egy másik lefoglalt műsorral van átfedésben.\nJobb kattintással többet megtudhat.");

                        labelStatus.Text = "Nem foglalható";
                    }
                    labelStatus.ForeColor = Color.Gray;
                    labelStatus.Visible   = true;
                }
                else
                {
                    //Ha pedig nincs foglalt program ennek az időpontjában, akkor a gombhoz hozzárendeljük a foglalást megvalósító metódust.
                    buttonFoglalas.Click += (o, i) => { TvProgramManager.ReserveTvProgram(program, room); };
                }
                //Itt pedig felülírjuk a dolgokat annyival, hogyha az adott műsor saját szoba foglalása.
                if (context.Rooms.Find(program.ReservedRoomId) != null)
                {
                    if (room != null && context.Rooms.Find(program.ReservedRoomId).RoomId == room.RoomId)
                    {
                        labelStatus.ForeColor = Color.Green;
                        labelStatus.Text      = "Saját foglalás";
                        labelStatus.Visible   = true;
                    }
                    buttonFoglalas.Visible = false;
                }
            }


            //FOGLALÁS ENDS

            Controls.Add(labelTitle);
            Controls.Add(labelGenre);
            Controls.Add(labelTimeLength);
            Controls.Add(labelStatus);
            Controls.Add(pictureKorhatar);
            Controls.Add(labelStartTime);
            Controls.Add(buttonFoglalas);
            Controls.Add(elapsedTimeProgress);
            elapsedTimeProgress.BringToFront();

            Timer timer = new Timer()
            {
                Interval = 5000
            };

            timer.Tick += (obj, args) => { CheckProgramElapsedTime(); };
            timer.Start();


            System.Windows.Forms.ToolTip tt = new System.Windows.Forms.ToolTip();
            tt.SetToolTip(pictureKorhatar, TvProgramManager.GetAgeLimitMessage(program.AgeLimit));
            tt.SetToolTip(labelStartTime, $"Kezdés: {program.StartTime.TimeOfDay} - Vége: {program.EndTime.TimeOfDay}");
            tt.SetToolTip(labelTimeLength, $"Vége: {program.EndTime.TimeOfDay}");
        }