예제 #1
0
        /// <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);
        }