MONI.Data.WorkDayParser.Parse C# (CSharp) Method

Parse() public method

public Parse ( string userInput, WorkDay &wdToFill ) : WorkDayParserResult
userInput string
wdToFill WorkDay
return WorkDayParserResult
        public WorkDayParserResult Parse(string userInput, ref WorkDay wdToFill)
        {
            // remove newlines
            userInput = userInput.Replace(Environment.NewLine, "");
            ShortCut wholeDayShortcut;
            userInput = this.PreProcessWholeDayExpansion(userInput, wdToFill.DateTime, out wholeDayShortcut);
            bool ignoreBreakSettings = userInput.StartsWith(automaticPauseDeactivation);
            if (ignoreBreakSettings)
            {
                userInput = userInput.Substring(2);
            }
            WorkDayParserResult ret = new WorkDayParserResult();
            if (!String.IsNullOrEmpty(userInput))
            {
                TimeItem dayStartTime;
                string remainingString;
                string error;
                // should be like "<daystarttime>,..."
                // eg 7,... or 7:30,...
                if (this.GetDayStartTime(userInput, out dayStartTime, out remainingString, out error))
                {
                    // proceed with parsing items
                    var parts = remainingString.SplitWithIgnoreRegions(new[] { itemSeparator }, new IgnoreRegion('(', ')'));
                    var wdItemsAsString = parts.Where(p => !string.IsNullOrWhiteSpace(p)).ToList();
                    if (wdItemsAsString.Any())
                    {
                        List<WorkItemTemp> tmpList = new List<WorkItemTemp>();
                        foreach (var wdItemString in wdItemsAsString)
                        {
                            WorkItemTemp workItem;
                            if (this.GetWDTempItem(wdItemString, out workItem, out error, wdToFill.DateTime, wholeDayShortcut))
                            {
                                tmpList.Add(workItem);
                            }
                            else
                            {
                                ret.Error = error;
                                ret.Success = false;
                                // todo: fail fast??
                            }
                        }
                        IEnumerable<WorkItem> resultList;
                        if (this.ProcessTempWorkItems(dayStartTime, tmpList, ignoreBreakSettings, out resultList, out error))
                        {
                            wdToFill.Clear();
                            foreach (var workItem in resultList)
                            {
                                wdToFill.AddWorkItem(workItem);
                            }
                            ret.Success = true;
                        }
                        else
                        {
                            ret.Error = error;
                        }
                    }
                    else
                    {
                        // this is no error for now
                        ret.Success = true;
                        ret.Error = "Noch keine Einträge gemacht";
                    }
                }
                else
                {
                    ret.Error = error;
                }
            }
            else
            {
                ret.Error = "Noch keine Eingabe";
            }
            return ret;
        }

Usage Example

Exemplo n.º 1
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);
        }
All Usage Examples Of MONI.Data.WorkDayParser::Parse