/// <summary> /// Удаление дублирующих строк в списке по дате. /// </summary> /// <returns>Список строк.</returns> private List <string> RemoveDuplicateLinesByDate(List <string> listRandom) { int nextItem; DateTime date = new DateTime(); DateTime nextDate = new DateTime(); ReportLine repLine = new ReportLine(); for (int i = 0; i < listRandom.Count; i++) { nextItem = i + 1; if (nextItem < listRandom.Count) { date = repLine.GetDateFromString(listRandom[i]); nextDate = repLine.GetDateFromString(listRandom[nextItem]); if (date == nextDate) { listRandom.RemoveAt(nextItem); i--; } } } return(listRandom); }
/// <summary> /// Находит дублирующие строки в списке по дате имени и фамилии, из двух строк делает одну, вторую удаляет. /// </summary> /// <param name="listHoursWorked"></param> /// <returns></returns> public List <string> FindDuplicateLines(List <string> listHoursWorked) { ReportLine repLine = new ReportLine(); DateTime date = new DateTime(); DateTime nextDate = new DateTime(); int nextItem; for (int i = 0; i < listHoursWorked.Count; i++) { date = repLine.GetDateFromString(listHoursWorked[i]); if (i < listHoursWorked.Count - 1) { nextItem = i + 1; nextDate = repLine.GetDateFromString(listHoursWorked[nextItem]); if (date == nextDate) { var nameAndSurname = repLine.GetNameAndSurnameFromString(listHoursWorked[i]); var nextNameAndSurname = repLine.GetNameAndSurnameFromString(listHoursWorked[nextItem]); // Если имя и фамилия в строке, равна имени и фамилии в селдующей строке списка. if (nameAndSurname.Item1 == nextNameAndSurname.Item1 && nameAndSurname.Item2 == nextNameAndSurname.Item2) { // Получаем все данные из строки. var data = repLine.GetDataFromString(listHoursWorked[i]); // Получаем рабочие часы и задачу из следующей строки. var nextData = repLine.GetHoursAndTaskFromString(listHoursWorked[nextItem]); // Складываем рабочие часы из двух строк. data.Item4 += nextData.Item1; // Создаем новую строку с задачами из текущей строки и следующей строки. data.Item5 = $"{data.Item5} {nextData.Item2}"; // Общее рабочее время за сутки не может привышать 24 часа. if (data.Item4 > 24) { data.Item4 = 24; } // Создаем новую строку. string newLine = repLine.CreateReportLine(data.Item1, data.Item2, data.Item3, data.Item4, data.Item5); // Удаляем следующую строку. listHoursWorked.RemoveAt(nextItem); // Записываем новую строку по текущему индексу. listHoursWorked[i] = newLine; i--; } } } } return(listHoursWorked); }
/// <summary> /// Формирование списка строк отчета за день по конкретному сотруднику. /// </summary> private void DailyReport(List <string> listHoursWorked) { ReportLine reportLine = new ReportLine(); foreach (var str in listHoursWorked) { if (startDate == reportLine.GetDateFromString(str)) { totalHoursWorked += reportLine.GetHoursWorkedFromString(str); _listReport.Add(CreateReportLine(str)); } } }
/// <summary> /// Установить строки за период в переменную _listReport. /// </summary> private void SetLinesForPeriod(List <string> listHoursWorked) { // Считываемая дата. DateTime readDate; ReportLine reportLine = new ReportLine(); foreach (var line in listHoursWorked) { readDate = reportLine.GetDateFromString(line); if (readDate >= startDate && readDate <= endDate) { totalHoursWorked += reportLine.GetHoursWorkedFromString(line); _listReport.Add(CreateReportLine(line)); } } }