/// <summary> /// <paramref name="period"/>를 <paramref name="periodKind"/> 단위로 열거합니다. /// </summary> /// <param name="period">전체 기간</param> /// <param name="periodKind">열거할 기간의 단위</param> /// <returns>열거할 기간 단위를 가지는 기간의 컬렉션</returns> public static IEnumerable <ITimePeriod> ForEachPeriods(this ITimePeriod period, PeriodKind periodKind) { switch (periodKind) { case PeriodKind.Year: return(period.ForEachYears()); case PeriodKind.Halfyear: return(period.ForEachHalfYears()); case PeriodKind.Quarter: return(period.ForEachQuarters()); case PeriodKind.Month: return(period.ForEachMonths()); case PeriodKind.Week: return(period.ForEachWeeks()); case PeriodKind.Day: return(period.ForEachDays()); case PeriodKind.Hour: return(period.ForEachHours()); case PeriodKind.Minute: return(period.ForEachMinutes()); default: throw new InvalidOperationException("지원하지 않는 PeriodKind입니다. PeriodKind=" + periodKind); } }
/// <summary> /// 기간 단위에 따라 Category를 생성합니다. /// </summary> /// <param name="categoryCollectionList">생성된 <see cref="CategoriesElement"/> 정보가 담길 객체</param> /// <param name="timePeriod">Gantt에 표현할 전체 기간 (프로젝트 전체 기간)</param> /// <param name="periodFlags">Gantt Chart X축에 나타낼 기간 단위 정보</param> public static void GenerateCategories(IList <CategoriesElement> categoryCollectionList, ITimePeriod timePeriod, PeriodFlags periodFlags) { categoryCollectionList.ShouldNotBeNull("categoryCollectionList"); timePeriod.ShouldNotBeNull("periodRange"); Guard.Assert(timePeriod.HasPeriod, "Gantt에 나타낼 전체 기간은 시작과 끝이 있어야합니다."); if (IsDebugEnabled) { log.Debug("Gantt의 기간 부분을 생성합니다. timePeriod=[{0}], periodFlags=[{1}]", timePeriod, periodFlags); } categoryCollectionList.Clear(); if ((periodFlags & PeriodFlags.Year) > 0) { categoryCollectionList.Add(CreateCategories(timePeriod.ForEachYears(), range => range.Start.Year.ToString())); } if ((periodFlags & PeriodFlags.HalfYear) > 0) { categoryCollectionList.Add(CreateCategories(timePeriod.ForEachYears(), range => (range.End.HalfyearOf() == HalfyearKind.First) ? "1st" : "2nd")); } if ((periodFlags & PeriodFlags.Quarter) > 0) { categoryCollectionList.Add(CreateCategories(timePeriod.ForEachQuarters(), range => "Q" + range.End.QuarterOf().GetHashCode().ToString())); } if ((periodFlags & PeriodFlags.Month) > 0) { categoryCollectionList.Add(CreateCategories(timePeriod.ForEachMonths(), range => range.End.GetMonthName())); } if ((periodFlags & PeriodFlags.Week) > 0) { categoryCollectionList.Add(CreateCategories(timePeriod.ForEachWeeks(), range => "W" + range.End.GetYearAndWeek().Week.Value.ToString())); } if ((periodFlags & PeriodFlags.Day) > 0) { categoryCollectionList.Add(CreateCategoriesAsParallel(timePeriod.ForEachDays(), range => range.End.Day.ToString())); } if ((periodFlags & PeriodFlags.Hour) > 0) { categoryCollectionList.Add(CreateCategoriesAsParallel(timePeriod.ForEachHours(), range => "H" + range.End.Hour.ToString())); } }
/// <summary> /// 기간 단위에 따라 Category를 생성합니다. /// </summary> /// <param name="categoryCollectionList">생성된 <see cref="CategoriesElement"/> 정보가 담길 객체</param> /// <param name="timePeriod">Gantt에 표현할 전체 기간 (프로젝트 전체 기간)</param> /// <param name="periodFlags">Gantt Chart X축에 나타낼 기간 단위 정보</param> public static void GenerateCategories(IList<CategoriesElement> categoryCollectionList, ITimePeriod timePeriod, PeriodFlags periodFlags) { categoryCollectionList.ShouldNotBeNull("categoryCollectionList"); timePeriod.ShouldNotBeNull("periodRange"); Guard.Assert(timePeriod.HasPeriod, "Gantt에 나타낼 전체 기간은 시작과 끝이 있어야합니다."); if(IsDebugEnabled) log.Debug("Gantt의 기간 부분을 생성합니다. timePeriod=[{0}], periodFlags=[{1}]", timePeriod, periodFlags); categoryCollectionList.Clear(); if((periodFlags & PeriodFlags.Year) > 0) categoryCollectionList.Add(CreateCategories(timePeriod.ForEachYears(), range => range.Start.Year.ToString())); if((periodFlags & PeriodFlags.HalfYear) > 0) categoryCollectionList.Add(CreateCategories(timePeriod.ForEachYears(), range => (range.End.HalfyearOf() == HalfyearKind.First) ? "1st" : "2nd")); if((periodFlags & PeriodFlags.Quarter) > 0) categoryCollectionList.Add(CreateCategories(timePeriod.ForEachQuarters(), range => "Q" + range.End.QuarterOf().GetHashCode().ToString())); if((periodFlags & PeriodFlags.Month) > 0) categoryCollectionList.Add(CreateCategories(timePeriod.ForEachMonths(), range => range.End.GetMonthName())); if((periodFlags & PeriodFlags.Week) > 0) categoryCollectionList.Add(CreateCategories(timePeriod.ForEachWeeks(), range => "W" + range.End.GetYearAndWeek().Week.Value.ToString())); if((periodFlags & PeriodFlags.Day) > 0) categoryCollectionList.Add(CreateCategoriesAsParallel(timePeriod.ForEachDays(), range => range.End.Day.ToString())); if((periodFlags & PeriodFlags.Hour) > 0) categoryCollectionList.Add(CreateCategoriesAsParallel(timePeriod.ForEachHours(), range => "H" + range.End.Hour.ToString())); }
public void MultipleCategories() { var chart = CreateSampleChart("Multiple Categories Gantt Chart"); var quaterCategories = new CategoriesElement(); // 분기별 Category를 만든다. foreach (var quarterRange in ProjectPeriod.ForEachQuarters()) { var category = new CategoryElement { Start = quarterRange.Start, End = quarterRange.End, ItemAttr = { Label = quarterRange.Start.GetQuarter().ToString() } }; quaterCategories.Add(category); } chart.CategoriesList.Insert(0, quaterCategories); ValidateChartXml(chart); }