internal WorkReport DoWork() { AppealCase opCase = _opTimes.OPScheduledForCurrentHour; if (opCase != null) { return(new OPWorkReport(opCase)); } if (_currentCase == null) { _getNextCase(); } if (_currentCase == null) { return(new NullWorkReport()); } _workCase(); WorkReport report; if (_workCounter == 0) { report = new WorkReport(_currentCase, _currentWorkType, _currentRole, Work.WorkState.Finished); _currentCase = null; } else { report = new WorkReport(_currentCase, _currentWorkType, _currentRole, Work.WorkState.Ongoing); } return(report); }
internal void Add(Member m, WorkReport r) { if (Log.ContainsKey(m)) { throw new InvalidOperationException("Member has already been logged."); } Log[m] = r; }
internal BoardLog DoWork() { _processCirculatingCases(); _processIncomingCases(); BoardLog log = new BoardLog(); foreach (Member m in _members()) { WorkReport report = m.DoWork(); log.Add(m, report); if (report.State == Work.WorkState.Finished) { AppealCase appealCase = report.Case; _circulatingCases.Enqueue(appealCase); } } return(log); }