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;
}