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