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(); } }
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(); } } }
/// <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); } }
///<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); } }
//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); }
//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); } } }
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); } }
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); }
/// <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); } } }
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); } }
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(); } } } }
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); } }
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}"); }