Esempio n. 1
0
        public DialogKisTasks(IWorktimeRecordStorage storage, IProjectHandler projectHandler)
        {
            InitializeComponent();

            WorktimeAnalyzer   = new WorktimeAnalyzer(storage, projectHandler);
            KISTimesCalculator = new KISTimesCalculator();
        }
Esempio n. 2
0
        /**
         * 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();
        }
Esempio n. 3
0
        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;
            }
        }