public DialogKisTasks(IWorktimeRecordStorage storage, IProjectHandler projectHandler) { InitializeComponent(); WorktimeAnalyzer = new WorktimeAnalyzer(storage, projectHandler); KISTimesCalculator = new KISTimesCalculator(); }
/** * Was too lazy to create a decent GUI-architecture */ public void Show(DateTime day) { var projectStatistics = WorktimeAnalyzer.AnalyzeWorkday(day); var kisTimes = KISTimesCalculator.generateKISTimes(projectStatistics, day); foreach (var kisTime in kisTimes) { if (kisTime.ProjectTrackerProject == KISTimesCalculator.LunchtimeProjectname) { continue; } kisTasksView.Rows.Add( day.ToShortDateString(), kisTime.Start.ToString("HHmm"), kisTime.End.ToString("HHmm"), Math.Round(kisTime.getLength().TotalHours, 2), Math.Round(kisTime.QuantizationError.TotalMinutes, 0), kisTime.ProjectTrackerProject, String.Join(" | ", kisTime.Comments)); } Show(); }
public void WorkOvertime2Project() { var mainHandler = new ProjectChangeHandler(); var projectAnalysisHandler = new ProjectChangeNotifierAnalysis(mainHandler); var wtanalyzer = new WorktimeAnalyzer(new WorktimeRecordStorageInMemory(), mainHandler); var obj = new PrivateObject(wtanalyzer); var origOvertime = ProjectTracker.Properties.Settings.Default.maxWorktime; var availableProject = ProjectTracker.Properties.Settings.Default.AvailableProjects; if (availableProject.Count < 2) { throw new Exception("Project must have at least 2 available projects for this test to run"); } try { ProjectTracker.Properties.Settings.Default.maxWorktime = "04:00"; var originalWts = new WorktimeStatistics(); originalWts.projectTimes = new System.Collections.Generic.Dictionary <string, TimeSpan> { { availableProject[0], new TimeSpan(2, 0, 0) }, { availableProject[1], new TimeSpan(6, 0, 0) } }; originalWts.totalTime = new TimeSpan(8, 0, 0); originalWts.totalWorktime = new TimeSpan(8, 0, 0); originalWts.totalProjectTime = new TimeSpan(8, 0, 0); var expectedStats = new WorktimeStatistics(); expectedStats.projectTimes = new System.Collections.Generic.Dictionary <string, TimeSpan> { { availableProject[0], new TimeSpan(0, 0, 0) }, { availableProject[1], new TimeSpan(4, 0, 0) } }; expectedStats.relativeProjectTimes = new System.Collections.Generic.Dictionary <string, float> { { availableProject[0], 0f }, { availableProject[1], 100f } }; expectedStats.totalTime = new TimeSpan(4, 0, 0); expectedStats.totalWorktime = new TimeSpan(4, 0, 0); expectedStats.totalProjectTime = new TimeSpan(4, 0, 0); var originalOvertime = new Dictionary <string, TimeSpan> { { availableProject[0], new TimeSpan(1, 0, 0) }, { availableProject[1], new TimeSpan(1, 0, 0) } }; var expectedOvertime = new Dictionary <string, TimeSpan> { { availableProject[0], new TimeSpan(3, 0, 0) }, { availableProject[1], new TimeSpan(3, 0, 0) } }; object[] args = new object[] { originalWts, originalOvertime }; var ret = (Tuple <WorktimeStatistics, Dictionary <string, TimeSpan> >)obj.Invoke("calculateOvertimeUndertimeForTesting", args); var retStats = ret.Item1; var retOvertime = ret.Item2; CollectionComparer.AssertDictionaryEqual(retStats.projectTimes, expectedStats.projectTimes); CollectionComparer.AssertDictionaryEqual(retStats.relativeProjectTimes, expectedStats.relativeProjectTimes); Assert.AreEqual(expectedStats.totalTime, retStats.totalTime); Assert.AreEqual(expectedStats.totalWorktime, retStats.totalWorktime); Assert.AreEqual(expectedStats.totalProjectTime, retStats.totalProjectTime); CollectionComparer.AssertDictionaryEqual(retOvertime, expectedOvertime); } finally { ProjectTracker.Properties.Settings.Default.maxWorktime = origOvertime; } }