MONI.Data.WorkDayParser.ProcessTempWorkItems C# (CSharp) Метод

ProcessTempWorkItems() приватный Метод

private ProcessTempWorkItems ( TimeItem dayStartTime, IEnumerable tmpList, bool ignoreBreakSettings, IEnumerable &resultList, string &error ) : bool
dayStartTime TimeItem
tmpList IEnumerable
ignoreBreakSettings bool
resultList IEnumerable
error string
Результат bool
        private bool ProcessTempWorkItems(TimeItem dayStartTime, IEnumerable<WorkItemTemp> tmpList, bool ignoreBreakSettings, out IEnumerable<WorkItem> resultList, out string error)
        {
            bool success = false;
            error = string.Empty;
            List<WorkItem> resultListTmp = new List<WorkItem>();
            TimeItem lastTime = dayStartTime;
            foreach (var workItemTemp in tmpList)
            {
                try
                {
                    // check for pause
                    if (workItemTemp.IsPause)
                    {
                        if (workItemTemp.DesiredEndtime != null)
                        {
                            lastTime = workItemTemp.DesiredEndtime;
                        }
                        else
                        {
                            lastTime += workItemTemp.HourCount;
                        }
                    }
                    else
                    {
                        bool endTimeMode = false; // if endTimeMode do not add, but substract break!
                        TimeItem currentEndTime;
                        if (workItemTemp.DesiredEndtime != null)
                        {
                            currentEndTime = workItemTemp.DesiredEndtime;
                            endTimeMode = true;
                        }
                        else
                        {
                            currentEndTime = lastTime + workItemTemp.HourCount;
                        }
                        // check for split
                        if (this.settings != null && this.settings.InsertDayBreak && !ignoreBreakSettings)
                        {
                            if (endTimeMode && currentEndTime.IsBetween(this.settings.DayBreakTime, this.settings.DayBreakTime + this.settings.DayBreakDurationInMinutes / 60d))
                            {
                                success = false;
                                error = string.Format("Der Eintrag {0} hat eine absolute Endzeit und endet in der automatischen Tagespause( {1} + {2}min ). Das ist nicht auflösbar.", workItemTemp.OriginalString, this.settings.DayBreakTime, this.settings.DayBreakDurationInMinutes);
                                break;
                            }
                            // the break is in an item
                            if (this.settings.DayBreakTime.IsBetween(lastTime, currentEndTime))
                            {
                                // insert new item
                                resultListTmp.Add(new WorkItem(lastTime, this.settings.DayBreakTime, workItemTemp.ProjectString, workItemTemp.PosString, workItemTemp.Description, workItemTemp.ShortCut, workItemTemp.OriginalString));
                                lastTime = this.settings.DayBreakTime + this.settings.DayBreakDurationInMinutes / 60d;
                                if (!endTimeMode)
                                {
                                    // fixup currentEndTime, need to add the dayshiftbreak
                                    currentEndTime = currentEndTime + this.settings.DayBreakDurationInMinutes / 60d;
                                }
                            }
                            else if (this.settings.DayBreakTime.Equals(lastTime))
                            {
                                lastTime = lastTime + this.settings.DayBreakDurationInMinutes / 60d;
                                if (!endTimeMode)
                                {
                                    currentEndTime = currentEndTime + this.settings.DayBreakDurationInMinutes / 60d;
                                }
                            }
                        }
                        resultListTmp.Add(new WorkItem(lastTime, currentEndTime, workItemTemp.ProjectString, workItemTemp.PosString, workItemTemp.Description, workItemTemp.ShortCut, workItemTemp.OriginalString));
                        lastTime = currentEndTime;
                        success = true;
                    }
                }
                catch (Exception exception)
                {
                    error = string.Format("Beim Verarbeiten von \"{0}\" ist dieser Fehler aufgetreten: \"{1}\"", workItemTemp.OriginalString, exception.Message);
                    success = false;
                }
            }
            resultList = resultListTmp;
            return success;
        }