コード例 #1
0
 public ProgramActivity(Day day, DateTime time)
 {
     this.Day = day;
     this.Time = time;
     this.ProgramLink = Guid.Empty;
     this.UserName = string.Empty;
 }
コード例 #2
0
 public ProgramActivity(Day day)
 {
     this.Day = day;
     this.ProgramLink = Guid.Empty;
     this.UserName = string.Empty;
 }
コード例 #3
0
        private void LoadDataFromOldFormat()
        {
            DateTime tempDate;
            int tempInt;

            string filePath = Path.Combine(this.RootFolderPath, "olddata.xml");
            Day fakeDay = new Day(this, DateTime.Now);
            List<ProgramActivity> programActivities = new List<ProgramActivity>();

            if (File.Exists(filePath))
            {
                XmlDocument document = new XmlDocument();

                document.Load(filePath);

                XmlNode node = document.SelectSingleNode(@"/RECORDS");
                if (node != null)
                {
                    foreach (XmlNode recordNode in node.ChildNodes)
                    {
                        ProgramActivity programActivity = new ProgramActivity(fakeDay);
                        foreach (XmlNode rowNode in recordNode.ChildNodes)
                        {
                            foreach (XmlAttribute attribute in rowNode.Attributes)
                            {
                                switch (attribute.Name)
                                {
                                    case "PROG_DATE":
                                        if (DateTime.TryParseExact(attribute.Value, "yyyyMMdd", new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out tempDate))
                                            programActivity.Time = tempDate;
                                        break;
                                    case "PROG_SO":
                                        if (int.TryParse(attribute.Value, out tempInt))
                                            programActivity.Time = new DateTime(programActivity.Time.Year, programActivity.Time.Month, programActivity.Time.Day, 5, 0, 0).AddMinutes(30 * (tempInt - 1));
                                        break;
                                    case "PROG_PROG":
                                        programActivity.Program = attribute.Value;
                                        break;
                                    case "PROG_LSN":
                                        programActivity.Type = attribute.Value;
                                        break;
                                    case "PROG_EPI":
                                        programActivity.Episode = attribute.Value;
                                        break;
                                }
                            }
                        }
                        if (programActivity.Time.Year >= 2012 && programActivity.Time.Year <= 2015)
                            programActivities.Add(programActivity);
                    }
                }
                if (programActivities.Count > 1)
                {
                    string programName = string.Empty;
                    foreach (ProgramActivity programActivity in programActivities)
                    {
                        if (!string.IsNullOrEmpty(programActivity.Program))
                            programName = programActivity.Program;
                        else if (!string.IsNullOrEmpty(programActivity.Type))
                            programActivity.Program = programName;
                    }

                    DateTime minDate = programActivities.Select(x => x.Time).Min();
                    DateTime maxDate = programActivities.Select(x => x.Time).Max();
                    while (minDate < maxDate)
                    {
                        Day day = new Day(this, minDate);
                        day.AddProgramActivityRange(programActivities.Where(x => x.Time >= day.StartTime && x.Time < day.EndTime).ToArray());
                        day.Save();
                        minDate = minDate.AddDays(1);
                    }
                }
            }
        }
コード例 #4
0
 public Day GetDay(DateTime date)
 {
     Day day = this.Days.Where(x => x.Date.Year.Equals(date.Date.Year) && x.Date.Month.Equals(date.Date.Month) && x.Date.Day.Equals(date.Date.Day)).FirstOrDefault();
     if (day == null && date != DateTime.MinValue)
     {
         day = new Day(this, date);
         this.Days.Add(day);
         this.Days.Sort((x, y) => x.Date.CompareTo(y.Date));
     }
     return day;
 }
コード例 #5
0
		public static void GenerateWeekSchedule(
			string templatePath,
			Day[][] days,
			string destinationFilePath,
			bool convertToPDF,
			bool landscape,
			ProgramScheduleSettings outputSettings)
		{
			if (!File.Exists(templatePath) || !ExcelHelper.Instance.Connect()) return;
			try
			{
				var destinationWorkBook = ExcelHelper.Instance.ExcelObject.Workbooks.Add();

				for (var i = 1; i < 3; i++)
					try
					{
						destinationWorkBook.Worksheets[i].Delete();
					}
					catch
					{
						break;
					}

				var worksheetIndex = 1;
				var sheduleGenrated = DateTime.Now;

				foreach (var weekDays in days)
				{
					var sourceWorkBook = ExcelHelper.Instance.ExcelObject.Workbooks.Open(templatePath);
					Worksheet workSheet = sourceWorkBook.Worksheets["Week"];

					var title = string.Format("{0} - Weekly Program Schedule", weekDays.FirstOrDefault().Station.Name);
					var dateRange = string.Format("Week of {0}", weekDays.FirstOrDefault().Date.ToString("MMMM d, yyyy"));
					workSheet.PageSetup.CenterHeader = String.Format("&\"{0}{2}\"&{1}", outputSettings.HeaderFont.Name, outputSettings.HeaderFont.Size.ToString(), outputSettings.HeaderFont.Bold ? ",bold" : string.Empty) + title + (char)13 + dateRange;

					workSheet.PageSetup.CenterFooter = String.Format("&\"{0}{2}\"&{1}", outputSettings.FooterFont.Name, outputSettings.FooterFont.Size.ToString(), outputSettings.FooterFont.Bold ? ",bold" : string.Empty) + "Schedule Generated" + (char)13 + sheduleGenrated.ToString("MM/dd/yy h:mm tt");

					var range = workSheet.Range["Data"];
					range.Font.Name = outputSettings.BodyFont.Name;
					range.Font.Size = outputSettings.BodyFont.Size;
					range.Font.Bold = outputSettings.BodyFont.Bold;
					range.Font.Italic = outputSettings.BodyFont.Italic;

					if (outputSettings.UsePrimeTimeSpecialFontSize)
					{
						{
							var firstColumn = workSheet.Range["day1"].Column;
							var lastColumn = workSheet.Range["day6"].Column;

							var firstRow = workSheet.Range["day1"].Row + 1;
							var time = new DateTime(1, 1, 1, 5, 0, 0);
							while (!(time.Hour == outputSettings.WeekPrimeTimeStart.Hour && time.Minute == outputSettings.WeekPrimeTimeStart.Minute))
							{
								time = time.AddMinutes(30);
								firstRow++;
							}

							var lastRow = firstRow;
							while (!(time.Hour == outputSettings.WeekPrimeTimeEnd.Hour && time.Minute == outputSettings.WeekPrimeTimeEnd.Minute))
							{
								time = time.AddMinutes(30);
								lastRow++;
							}

							range = workSheet.Range[GetColumnLetterByIndex(firstColumn) + firstRow + ":" + GetColumnLetterByIndex(lastColumn) + lastRow];
							range.Font.Name = outputSettings.BodyFont.Name;
							range.Font.Size = outputSettings.PrimeTimeSpecialFontSize;
							range.Font.Bold = outputSettings.BodyFont.Bold;
							range.Font.Italic = outputSettings.BodyFont.Italic;
						}

						{
							var firstColumn = workSheet.Range["day7"].Column;
							var lastColumn = workSheet.Range["day7"].Column;

							var firstRow = workSheet.Range["day7"].Row + 1;
							var time = new DateTime(1, 1, 1, 5, 0, 0);
							while (!(time.Hour == outputSettings.SundayPrimeTimeStart.Hour && time.Minute == outputSettings.SundayPrimeTimeStart.Minute))
							{
								time = time.AddMinutes(30);
								firstRow++;
							}

							var lastRow = firstRow;
							while (!(time.Hour == outputSettings.SundayPrimeTimeEnd.Hour && time.Minute == outputSettings.SundayPrimeTimeEnd.Minute))
							{
								time = time.AddMinutes(30);
								lastRow++;
							}

							range = workSheet.Range[GetColumnLetterByIndex(firstColumn) + firstRow + ":" + GetColumnLetterByIndex(lastColumn) + lastRow];
							range.Font.Name = outputSettings.BodyFont.Name;
							range.Font.Size = outputSettings.PrimeTimeSpecialFontSize;
							range.Font.Bold = outputSettings.BodyFont.Bold;
							range.Font.Italic = outputSettings.BodyFont.Italic;
						}
					}

					var values = new object[48, 7];
					for (var j = 0; j < 48; j++)
						for (var i = 0; i < 7; i++)
							values[j, i] = weekDays[i].ProgramActivities[j].Program;
					workSheet.Range["Data"].Value2 = values;

					for (var i = 0; i < 7; i++)
					{
						range = workSheet.Range["day" + (i + 1)];
						range.Formula = weekDays[i].Date.ToString(landscape ? "dddd M/d" : "ddd M/d");
						var columnIndex = range.Column;
						var rowIndex = range.Row + 1;
						var programName = string.Empty;
						var firstRow = 0;
						for (var r = 0; r < 48; r++)
						{
							object value = workSheet.Range[GetColumnLetterByIndex(columnIndex) + (rowIndex + r)].Value;
							var currentProgramName = value != null ? value.ToString() : string.Empty;
							if (currentProgramName.Equals(programName)) continue;
							if (!string.IsNullOrEmpty(programName))
								workSheet.Range[GetColumnLetterByIndex(columnIndex) + firstRow + ":" + GetColumnLetterByIndex(columnIndex) + (rowIndex + r - 1)].Merge();
							firstRow = rowIndex + r;
							programName = currentProgramName;
						}
					}

					for (var i = 0; i < 7; i++)
					{
						range = workSheet.Range["day" + (i + 1)];
						var columnIndex = range.Column;
						var r = 0;
						object value;
						do
						{
							value = null;
							var rowIndex = 0;
							var rowRange = range.Offset[r];
							try
							{
								value = rowRange.Formula;
								rowIndex = rowRange.Row;
							}
							catch { }
							if (value != null)
							{
								var programName = string.Empty;
								var firstColumn = 0;
								for (var j = i; j < 7; j++)
								{
									object nextValue = null;
									try
									{
										nextValue = rowRange.Offset[ColumnOffset: j].Value;
									}
									catch { }
									var currentProgramName = nextValue != null ? nextValue.ToString() : string.Empty;
									if (currentProgramName.Equals(programName)) continue;
									if (!string.IsNullOrEmpty(programName))
										workSheet.Range[GetColumnLetterByIndex(firstColumn) + rowIndex + ":" + GetColumnLetterByIndex(columnIndex + j - 1) + rowIndex].Merge();
									firstColumn = columnIndex + j;
									programName = currentProgramName;
								}
							}
							r++;
						} while (value != null && r <= 48);
					}

					var dataRange = workSheet.Range["Data"];

					dataRange.Rows.AutoFit();

					//set correct page breaks
					var fisrtColumnNumber = workSheet.Range["day1"].Column;
					var lastColumnNumber = workSheet.Range["day7"].Column;
					var pageBreaks = workSheet.HPageBreaks;
					for (var i = 1; i <= pageBreaks.Count; i++)
					{
						var currentBreakRow = pageBreaks[i].Location.Row;
						var newBreakRow = currentBreakRow;
						var beforeRange = pageBreaks[i].Location;
						for (var j = fisrtColumnNumber; j <= lastColumnNumber; j++)
						{
							Range cellRange = workSheet.Cells[currentBreakRow, j];
							if (!cellRange.MergeCells) continue;
							if (beforeRange.Row > cellRange.MergeArea.Row)
							{
								beforeRange = cellRange.MergeArea;
								newBreakRow = beforeRange.Row;
							}
						}
						if (newBreakRow != currentBreakRow)
							workSheet.HPageBreaks.Add(beforeRange);
					}

					workSheet.Copy(After: destinationWorkBook.Worksheets[worksheetIndex]);
					worksheetIndex++;
					workSheet = destinationWorkBook.Worksheets[worksheetIndex];
					workSheet.Name = weekDays.FirstOrDefault().Date.ToString("MMddyy") + "-" + weekDays.LastOrDefault().Date.ToString("MMddyy");
					sourceWorkBook.Close();
				}

				destinationWorkBook.Worksheets[1].Delete();
				if (convertToPDF)
					destinationWorkBook.ExportAsFixedFormat(Filename: destinationFilePath, Type: XlFixedFormatType.xlTypePDF);
				else
					destinationWorkBook.SaveAs(destinationFilePath, XlFileFormat.xlWorkbookNormal);

				destinationWorkBook.Close();
			}
			catch { }
			finally
			{
				ExcelHelper.Instance.Disconnect();
			}
		}