Exemplo n.º 1
0
        public WorkMonth(int year, int month, GermanSpecialDays specialDays, WorkDayParserSettings parserSettings, float hoursPerDay)
        {
            this.parserSettings = parserSettings;
            this.year = year;
            this.month = month;
            this.hoursPerDay = hoursPerDay;
            this.Weeks = new ObservableCollection<WorkWeek>();
            this.Days = new ObservableCollection<WorkDay>();
            this.ShortCutStatistic = new QuickFillObservableCollection<ShortCutStatistic>();
            // TODO which date should i take?
            this.ReloadShortcutStatistic(parserSettings.ShortCuts);

            var cal = new GregorianCalendar();
            WorkWeek lastWeek = null;
            for (int day = 1; day <= cal.GetDaysInMonth(year, month); day++)
            {
                var dt = new DateTime(year, month, day);

                WorkDay wd = new WorkDay(year, month, day, specialDays);
                this.Days.Add(wd);
                var weekOfYear = cal.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
                if (lastWeek == null || lastWeek.WeekOfYear != weekOfYear)
                {
                    lastWeek = new WorkWeek(this, weekOfYear);
                    lastWeek.PropertyChanged += new PropertyChangedEventHandler(this.WeekPropertyChanged);
                    this.Weeks.Add(lastWeek);
                }
                lastWeek.AddDay(wd);
            }
        }
Exemplo n.º 2
0
        public WorkYear(int year, WorkDayParserSettings parserSettings, int hitListLookBackInWeeks, float hoursPerDay, PNSearchViewModel pnSearch, PositionSearchViewModel positionSearch)
        {
            this.hitListLookBackInWeeks = hitListLookBackInWeeks;
            this.pnSearch       = pnSearch;
            this.positionSearch = positionSearch;
            this.Year           = year;
            this.Months         = new ObservableCollection <WorkMonth>();

            var germanSpecialDays = SpecialDaysUtils.GetGermanSpecialDays(year);

            var calendar = new GregorianCalendar();

            for (var month = 1; month <= calendar.GetMonthsInYear(year); month++)
            {
                var workMonth = new WorkMonth(year, month, germanSpecialDays, parserSettings, hoursPerDay);
                this.Months.Add(workMonth);
            }

            this.ProjectHitlist  = new QuickFillObservableCollection <HitlistInfo>();
            this.PositionHitlist = new QuickFillObservableCollection <HitlistInfo>();

            Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() =>
            {
                this.UpdateProjectHitlistAsync().SafeFireAndForget(onException: exception => { logger.Error(exception, "Error while updating the Project Hitlist."); });
                this.UpdatePositionHitlistAsync().SafeFireAndForget(onException: exception => { logger.Error(exception, "Error while updating the Position Hitlist."); });

                foreach (var month in this.Months)
                {
                    foreach (var week in month.Weeks)
                    {
                        week.PropertyChanged += this.WorkWeek_PropertyChanged;
                    }
                }
            }));
        }
Exemplo n.º 3
0
        public WorkMonth(int year, int month, GermanSpecialDays specialDays, WorkDayParserSettings parserSettings, float hoursPerDay)
        {
            this.year              = year;
            this.month             = month;
            this.hoursPerDay       = hoursPerDay;
            this.Weeks             = new ObservableCollection <WorkWeek>();
            this.Days              = new ObservableCollection <WorkDay>();
            this.ShortCutStatistic = new QuickFillObservableCollection <ShortCutStatistic>();
            // TODO which date should i take?
            this.ReloadShortcutStatistic(parserSettings.ShortCuts);

            var      cal      = CultureInfo.CurrentCulture.Calendar;
            WorkWeek lastWeek = null;

            for (int day = 1; day <= cal.GetDaysInMonth(year, month); day++)
            {
                var dt = new DateTime(year, month, day);

                WorkDay wd = new WorkDay(year, month, day, specialDays);
                this.Days.Add(wd);
                var weekOfYear = cal.GetWeekOfYear(dt);
                if (lastWeek == null || lastWeek.WeekOfYear != weekOfYear)
                {
                    lastWeek = new WorkWeek(this, weekOfYear);
                    lastWeek.PropertyChanged += new PropertyChangedEventHandler(this.WeekPropertyChanged);
                    this.Weeks.Add(lastWeek);
                }
                lastWeek.AddDay(wd);
            }
        }
Exemplo n.º 4
0
        public WorkYear(int year, WorkDayParserSettings parserSettings, int hitListLookBackInWeeks, float hoursPerDay, PNSearchViewModel pnSearch, PositionSearchViewModel positionSearch)
        {
            this.hitListLookBackInWeeks = hitListLookBackInWeeks;
            this.pnSearch       = pnSearch;
            this.positionSearch = positionSearch;
            this.Year           = year;
            this.Months         = new ObservableCollection <WorkMonth>();
            this.Weeks          = new ObservableCollection <WorkWeek>();

            var germanSpecialDays = SpecialDaysUtils.GetGermanSpecialDays(year);

            var cal = new GregorianCalendar();

            for (int month = 1; month <= cal.GetMonthsInYear(year); month++)
            {
                WorkMonth wm = new WorkMonth(year, month, germanSpecialDays, parserSettings, hoursPerDay);
                this.Months.Add(wm);
                foreach (var workWeek in wm.Weeks)
                {
                    this.Weeks.Add(workWeek);
                    workWeek.PropertyChanged += this.workWeek_PropertyChanged;
                }
            }
            this.ProjectHitlist  = new QuickFillObservableCollection <HitlistInfo>();
            this.PositionHitlist = new QuickFillObservableCollection <HitlistInfo>();
            this.UpdateProjectHitlistAsync();
            this.UpdatePositionHitlistAsync();
        }
Exemplo n.º 5
0
        public void WDParser_HoleDayExpansionAndNormalExpansionShareSameKey_ReturnBothExpansions()
        {
            var abbr = new List<ShortCut>();
            abbr.Add(new ShortCut("a", "11111-111(b)") { WholeDayExpansion = false });
            abbr.Add(new ShortCut("a", "8,8;11111-111(b)") { WholeDayExpansion = true });
            WorkDayParserSettings workDayParserSettings = new WorkDayParserSettings { ShortCuts = abbr };
            WorkDayParser wdp = new WorkDayParser(workDayParserSettings);
            // find wholeday expansion
            WorkDay wd = new WorkDay(1, 1, 1, null);
            var workItemParserResult = wdp.Parse("a", ref wd);
            Assert.IsTrue(workItemParserResult.Success, workItemParserResult.Error);
            CollectionAssert.IsNotEmpty(wd.Items);
            CollectionAssert.AreEqual(new[] {
                new WorkItem(new TimeItem(8), new TimeItem(16), "11111", "111", "b")
            }, wd.Items);
            Assert.IsEmpty(workItemParserResult.Error);
            Assert.AreEqual(8, wd.HoursDuration);

            // find normal expansion
            wd = new WorkDay(1, 1, 2, null);
            workItemParserResult = wdp.Parse("8,8;a", ref wd);
            Assert.IsTrue(workItemParserResult.Success, workItemParserResult.Error);
            CollectionAssert.IsNotEmpty(wd.Items);
            CollectionAssert.AreEqual(new[] {
                new WorkItem(new TimeItem(8), new TimeItem(16), "11111", "111", "b")
            }, wd.Items);
            Assert.IsEmpty(workItemParserResult.Error);
            Assert.AreEqual(8, wd.HoursDuration);
        }
Exemplo n.º 6
0
        public WorkYear(int year, WorkDayParserSettings parserSettings, int hitListLookBackInWeeks, float hoursPerDay, PNSearchViewModel pnSearch, PositionSearchViewModel positionSearch)
        {
            this.hitListLookBackInWeeks = hitListLookBackInWeeks;
            this.pnSearch = pnSearch;
            this.positionSearch = positionSearch;
            this.Year = year;
            this.Months = new ObservableCollection<WorkMonth>();
            this.Weeks = new ObservableCollection<WorkWeek>();

            var germanSpecialDays = SpecialDaysUtils.GetGermanSpecialDays(year);

            var cal = new GregorianCalendar();
            for (int month = 1; month <= cal.GetMonthsInYear(year); month++)
            {
                WorkMonth wm = new WorkMonth(year, month, germanSpecialDays, parserSettings, hoursPerDay);
                this.Months.Add(wm);
                foreach (var workWeek in wm.Weeks)
                {
                    this.Weeks.Add(workWeek);
                    workWeek.PropertyChanged += this.workWeek_PropertyChanged;
                }
            }
            this.ProjectHitlist = new QuickFillObservableCollection<HitlistInfo>();
            this.PositionHitlist = new QuickFillObservableCollection<HitlistInfo>();
            this.UpdateProjectHitlistAsync();
            this.UpdatePositionHitlistAsync();
        }
Exemplo n.º 7
0
 public void WDParser_DestroyBreakWithAbsolutTimes_ShouldGiveError()
 {
     WorkDay wd = new WorkDay(1, 1, 1, null);
     WorkDayParserSettings workDayParserSettings = new WorkDayParserSettings { DayBreakDurationInMinutes = 30, InsertDayBreak = true, DayBreakTime = new TimeItem(12) };
     WorkDayParser wdp = new WorkDayParser(workDayParserSettings);
     var workItemParserResult = wdp.Parse("7:30,-11;11111-111,-11:45;11111-111,-12:15;11111-111,-15;11111-111", ref wd);
     Assert.IsFalse(workItemParserResult.Success, workItemParserResult.Error);
 }
Exemplo n.º 8
0
 public void WDParser_BrokenHoursWithBreak_CalculateCorrectly()
 {
     WorkDay wd = new WorkDay(1, 1, 1, null);
     WorkDayParserSettings workDayParserSettings = new WorkDayParserSettings { DayBreakDurationInMinutes = 30, InsertDayBreak = true, DayBreakTime = new TimeItem(12) };
     WorkDayParser wdp = new WorkDayParser(workDayParserSettings);
     var workItemParserResult = wdp.Parse("8:15,-15:30;11111-111,1;11111-111", ref wd);
     Assert.IsTrue(workItemParserResult.Success, workItemParserResult.Error);
     CollectionAssert.IsNotEmpty(wd.Items);
     CollectionAssert.AreEqual(new[] {
         new WorkItem(new TimeItem(8, 15), new TimeItem(12, 00), "11111", "111"),
         new WorkItem(new TimeItem(12, 30), new TimeItem(15, 30), "11111", "111"),
         new WorkItem(new TimeItem(15, 30), new TimeItem(16, 30), "11111", "111")
     }, wd.Items);
     Assert.IsEmpty(workItemParserResult.Error);
     Assert.AreEqual(7.75, wd.HoursDuration);
 }
Exemplo n.º 9
0
        public void ShortCutStatistic_OnAMonth_ShouldSumCorrect()
        {
            var abbr = new List<ShortCut>();
            abbr.Add(new ShortCut("ctb", "11111-111"));
            WorkDayParserSettings workDayParserSettings = new WorkDayParserSettings { ShortCuts = abbr, InsertDayBreak = false };
            WorkDayParser wdp = new WorkDayParser(workDayParserSettings);
            WorkDayParser.Instance = wdp;
            WorkMonth wm = new WorkMonth(2011, 1, null, workDayParserSettings, 1);
            WorkDay wd = wm.Days.First();
            wd.OriginalString = "8,8;ctb";

            wm.CalcShortCutStatistic();
            var scs = wm.ShortCutStatistic.FirstOrDefault(s => s.Key == "ctb");
            Assert.NotNull(scs);
            Assert.AreEqual(8, scs.UsedInMonth);
        }
Exemplo n.º 10
0
 public void WDParser_HoleDayExpansion_UseCompleteString()
 {
     WorkDay wd = new WorkDay(1, 1, 1, null);
     var abbr = new List<ShortCut>();
     abbr.Add(new ShortCut("krank", "8,8;11111-111(krank)") { WholeDayExpansion = true });
     WorkDayParserSettings workDayParserSettings = new WorkDayParserSettings { ShortCuts = abbr };
     WorkDayParser wdp = new WorkDayParser(workDayParserSettings);
     var workItemParserResult = wdp.Parse("krank", ref wd);
     Assert.IsTrue(workItemParserResult.Success, workItemParserResult.Error);
     CollectionAssert.IsNotEmpty(wd.Items);
     CollectionAssert.AreEqual(new[] {
         new WorkItem(new TimeItem(8), new TimeItem(16), "11111", "111", "krank")
     }, wd.Items);
     Assert.IsEmpty(workItemParserResult.Error);
     Assert.AreEqual(8, wd.HoursDuration);
 }
Exemplo n.º 11
0
 public void WDParser_PartEndsAtBreakTime_AddBreakCorrectly()
 {
     WorkDay wd = new WorkDay(1, 1, 1, null);
     WorkDayParserSettings workDayParserSettings = new WorkDayParserSettings { DayBreakDurationInMinutes = 30, InsertDayBreak = true, DayBreakTime = new TimeItem(12) };
     WorkDayParser wdp = new WorkDayParser(workDayParserSettings);
     var workItemParserResult = wdp.Parse("8,4;11111-111,4;11111-111", ref wd);
     Assert.IsTrue(workItemParserResult.Success, workItemParserResult.Error);
     CollectionAssert.IsNotEmpty(wd.Items);
     CollectionAssert.AreEqual(new[] {
         new WorkItem(new TimeItem(8), new TimeItem(12, 00), "11111", "111"),
         new WorkItem(new TimeItem(12, 30), new TimeItem(16, 30), "11111", "111")
     }, wd.Items);
     Assert.IsEmpty(workItemParserResult.Error);
     Assert.AreEqual(8, wd.HoursDuration);
 }
Exemplo n.º 12
0
 public void WDParser_ShortcutLinkInWorkItem_WholeDayShortcut()
 {
     WorkDay wd = new WorkDay(1, 1, 1, null);
     var abbr = new List<ShortCut>();
     var shortCut = new ShortCut("a", "8,8;11111-111(aa)") { WholeDayExpansion = true };
     abbr.Add(shortCut);
     WorkDayParserSettings workDayParserSettings = new WorkDayParserSettings { ShortCuts = abbr };
     WorkDayParser wdp = new WorkDayParser(workDayParserSettings);
     var workItemParserResult = wdp.Parse("a", ref wd);
     Assert.IsTrue(workItemParserResult.Success, workItemParserResult.Error);
     CollectionAssert.IsNotEmpty(wd.Items);
     CollectionAssert.AreEqual(new[] {
         new WorkItem(new TimeItem(8), new TimeItem(16), "11111", "111", "aa")
     }, wd.Items);
     Assert.IsEmpty(workItemParserResult.Error);
     Assert.AreEqual(8, wd.HoursDuration);
     Assert.AreEqual(shortCut, wd.Items.First().ShortCut);
 }
Exemplo n.º 13
0
 public WorkDayParser(WorkDayParserSettings settings)
 {
     this.settings = settings;
 }
Exemplo n.º 14
0
        public void WriteJson()
        {
            var parserSettings = new WorkDayParserSettings();
              parserSettings.ShortCuts.Add(new ShortCut("ctbn", "25482-420(features)"));
              parserSettings.ShortCuts.Add(new ShortCut("ctbp", "25482-811(performanceverbesserungen)"));
              parserSettings.ShortCuts.Add(new ShortCut("ctbf", "25482-811(tracker)"));
              parserSettings.ShortCuts.Add(new ShortCut("ctbm", "25482-140(meeting)"));
              parserSettings.ShortCuts.Add(new ShortCut("ctbr", "25482-050(ac-hh-ac)"));
              parserSettings.ShortCuts.Add(new ShortCut("ktln", "25710-420(feature)"));
              parserSettings.ShortCuts.Add(new ShortCut("ktlf", "25710-811(tracker)"));
              parserSettings.ShortCuts.Add(new ShortCut("ktlm", "25710-140(meeting)"));
              parserSettings.ShortCuts.Add(new ShortCut("ktlr", "25710-050(reise)"));
              parserSettings.ShortCuts.Add(new ShortCut("u", "20030-000(urlaub)"));
              parserSettings.ShortCuts.Add(new ShortCut("krank", "20020-000(krank/doc)"));
              parserSettings.ShortCuts.Add(new ShortCut("tm", "20018-140(terminalmeeting)"));
              parserSettings.ShortCuts.Add(new ShortCut("mm", "20018-140(tess/monatsmeeting)"));
              parserSettings.ShortCuts.Add(new ShortCut("swe", "20308-000(swe projekt)"));
              parserSettings.ShortCuts.Add(new ShortCut("jmb", "20308-000(jean-marie ausbildungsbetreuung)"));
              parserSettings.ShortCuts.Add(new ShortCut("w", "20180-000(weiterbildung)"));
              parserSettings.InsertDayBreak = true;
              parserSettings.DayBreakTime = new TimeItem(12);
              parserSettings.DayBreakDurationInMinutes = 30;

              var mainSettings = new MainSettings();

              MoniSettings ms = new MoniSettings();
              ms.ParserSettings = parserSettings;
              ms.MainSettings = mainSettings;

              var serializeObject = JsonConvert.SerializeObject(ms, Formatting.Indented);
              File.WriteAllText("settings.json.test", serializeObject);
        }
Exemplo n.º 15
0
 public void WDParser_UseAbbreviationsAndDesc_ExpandAbbreviationsAndOverwriteDescFromAbbr()
 {
     WorkDay wd = new WorkDay(1, 1, 1, null);
     var abbr = new List<ShortCut>();
     abbr.Add(new ShortCut("ctb", "11111-111(donotuseme)"));
     abbr.Add(new ShortCut("ktl", "22222-222(useme)"));
     WorkDayParserSettings workDayParserSettings = new WorkDayParserSettings { ShortCuts = abbr };
     WorkDayParser wdp = new WorkDayParser(workDayParserSettings);
     var workItemParserResult = wdp.Parse("9:00,2;ctb(useme),2;ktl", ref wd);
     Assert.IsTrue(workItemParserResult.Success, workItemParserResult.Error);
     CollectionAssert.IsNotEmpty(wd.Items);
     CollectionAssert.AreEqual(new[] { new WorkItem(new TimeItem(9, 0), new TimeItem(11, 0), "11111", "111", "useme", null, string.Empty), new WorkItem(new TimeItem(11, 0), new TimeItem(13, 0), "22222", "222", "useme", null, string.Empty) }, wd.Items);
     Assert.IsEmpty(workItemParserResult.Error);
 }
Exemplo n.º 16
0
 public void WDParser_UseAbbreviations_ExpandAbbreviations()
 {
     WorkDay wd = new WorkDay(1, 1, 1, null);
     var abbr = new List<ShortCut>();
     abbr.Add(new ShortCut("ctb", "11111-111"));
     abbr.Add(new ShortCut("ktl", "22222-222"));
     abbr.Add(new ShortCut("u", "33333-333"));
     WorkDayParserSettings workDayParserSettings = new WorkDayParserSettings { ShortCuts = abbr };
     WorkDayParser wdp = new WorkDayParser(workDayParserSettings);
     var workItemParserResult = wdp.Parse("9:00,2;ctb,1;u", ref wd);
     Assert.IsTrue(workItemParserResult.Success, workItemParserResult.Error);
     CollectionAssert.IsNotEmpty(wd.Items);
     CollectionAssert.AreEqual(new[] { new WorkItem(new TimeItem(9, 0), new TimeItem(11, 0), "11111", "111"), new WorkItem(new TimeItem(11, 0), new TimeItem(12, 00), "33333", "333") }, wd.Items);
     Assert.IsEmpty(workItemParserResult.Error);
 }
Exemplo n.º 17
0
 public WorkDayParser(WorkDayParserSettings settings)
 {
     this.settings = settings;
 }
Exemplo n.º 18
0
 public void WDParser_InsteadOfHoursICanTellAnEndTime_UseEndTime()
 {
     WorkDay wd = new WorkDay(1, 1, 1, null);
     var abbr = new List<ShortCut>();
     abbr.Add(new ShortCut("ctb", "11111-111"));
     abbr.Add(new ShortCut("ktl", "22222-222"));
     WorkDayParserSettings workDayParserSettings = new WorkDayParserSettings { ShortCuts = abbr };
     WorkDayParser wdp = new WorkDayParser(workDayParserSettings);
     var workItemParserResult = wdp.Parse("9:00,-12;ctb,-15;ktl", ref wd);
     Assert.IsTrue(workItemParserResult.Success, workItemParserResult.Error);
     CollectionAssert.IsNotEmpty(wd.Items);
     CollectionAssert.AreEqual(new[] { new WorkItem(new TimeItem(9, 0), new TimeItem(12, 0), "11111", "111"), new WorkItem(new TimeItem(12, 0), new TimeItem(15, 0), "22222", "222") }, wd.Items);
     Assert.IsEmpty(workItemParserResult.Error);
 }
Exemplo n.º 19
0
 public void WDParser_UsingEndTimeAndBreak_CalculateBreak()
 {
     WorkDay wd = new WorkDay(1, 1, 1, null);
     var abbr = new List<ShortCut>();
     abbr.Add(new ShortCut("ctb", "11111-111"));
     abbr.Add(new ShortCut("ktl", "22222-222"));
     WorkDayParserSettings workDayParserSettings = new WorkDayParserSettings { ShortCuts = abbr, DayBreakDurationInMinutes = 30, InsertDayBreak = true, DayBreakTime = new TimeItem(12) };
     WorkDayParser wdp = new WorkDayParser(workDayParserSettings);
     var workItemParserResult = wdp.Parse("9:00,-14;ctb,-16;ktl", ref wd);
     Assert.IsTrue(workItemParserResult.Success, workItemParserResult.Error);
     CollectionAssert.IsNotEmpty(wd.Items);
     CollectionAssert.AreEqual(new[] {
         new WorkItem(new TimeItem(9, 0), new TimeItem(12, 0), "11111", "111"),
         new WorkItem(new TimeItem(12, 30), new TimeItem(14, 0), "11111", "111"),
         new WorkItem(new TimeItem(14, 0), new TimeItem(16, 0), "22222", "222")
     }, wd.Items);
     Assert.IsEmpty(workItemParserResult.Error);
 }