Пример #1
0
        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);
        }
Пример #2
0
        internal void Add(Member m, WorkReport r)
        {
            if (Log.ContainsKey(m))
            {
                throw new InvalidOperationException("Member has already been logged.");
            }

            Log[m] = r;
        }
Пример #3
0
        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);
        }