Example #1
0
        public string GetFormatedAttendanceStatus(DateTime day, IPerson person, AttendanceFormat attendanceFormat, string timeFormat)
        {
            if (attendanceFormat != AttendanceFormat.StatusDescription)
                throw new NotImplementedException();
            if (person == null)
                throw new ArgumentNullException(nameof(person));

            if (IsDismissed(person, day))
                return FormatAttendance(AttendanceStatus.Dismissed);
            var businessDay = GetBusinessDay(day);
            var attendedTimes = businessDay.GetAttendedTimes(person.Identifier.Document);
            if (attendedTimes.Length == 0)
                return FormatAttendance(AttendanceStatus.Absent);
            else
                return FormatAttendance(AttendanceStatus.Attended);
        }
Example #2
0
        private string CreateCsvLine(IPerson person, AttendanceFormat attendanceFormat, string timeFormat, string columnSeparator)
        {
            var builder = new StringBuilder(person.Identifier.Document.Length + columnSeparator.Length +
                                            person.Name.Length + columnSeparator.Length +
                                            ((SortedDays.Length + columnSeparator.Length) * AverageFormatedAttendanceStatusLenght));

            builder.Append(person.Identifier.Document + columnSeparator);
            builder.Append(person.Name + columnSeparator);
            for (int i = 0; i < SortedDays.Length; i++)
            {
                var formatedAttendanceStatus = GetFormatedAttendanceStatus(SortedDays[i],
                                                                           person,
                                                                           attendanceFormat,
                                                                           timeFormat);
                builder.Append(formatedAttendanceStatus + columnSeparator);
            }

            return builder.ToString();
        }
Example #3
0
        private void WriteCsvImpl(string fileName,
                                  AttendanceFormat attendanceFormat,
                                  string dateFormat,
                                  string timeFormat,
                                  string columnSeparator,
                                  IPerson[] people)
        {
            using (var writer = File.CreateText(fileName))
            {
                var header = CreateCsvHeader(dateFormat, columnSeparator);
                var lines = CreateCsvBody(attendanceFormat, timeFormat, columnSeparator, people);

                writer.WriteLine(header);
                foreach (var l in lines)
                    writer.WriteLine(l);
            }
        }
Example #4
0
        private string[] CreateCsvBody(AttendanceFormat attendanceFormat, string timeFormat, string columnSeparator, IPerson[] people)
        {
            var lines = new string[people.Length];
            Parallel.For(0, people.Length, Default.ParallelOptions, i =>
            {
                lines[i] = CreateCsvLine(people[i], attendanceFormat, timeFormat, columnSeparator);
            });

            return lines;
        }
Example #5
0
        public void WriteCsvAsync(string fileName,
                                  AttendanceFormat attendanceFormat,
                                  string dateFormat,
                                  string timeOfExitFormat,
                                  string columnSeparator,
                                  ClosedInterval<float> attendanceRateToConsider,
                                  IEnumerable<IPerson> people)
        {
            if (fileName == null)
                throw new ArgumentNullException(nameof(fileName));
            if (attendanceFormat != AttendanceFormat.StatusDescription)
                throw new NotImplementedException(nameof(attendanceFormat));
            if (!DateTimeFormatStringIsValid(dateFormat))
                throw new FormatException(nameof(dateFormat));
            if (!DateTimeFormatStringIsValid(timeOfExitFormat))
                throw new FormatException(nameof(timeOfExitFormat));
            if (columnSeparator == null)
                throw new ArgumentNullException(nameof(columnSeparator));
            if (people == null)
                throw new ArgumentNullException(nameof(people));
            if (attendanceRateToConsider.Minimum < 0 || attendanceRateToConsider.Maximum > 1)
                throw new ArgumentOutOfRangeException(nameof(attendanceRateToConsider) + " must be between [0,1].");

            var peopleWithinTargetAttendanceRate = people.Where(p => PersonIsWithinTargetAttendanceRate(p, attendanceRateToConsider)).ToArray();

            WriteCsvImpl(fileName,
                         attendanceFormat,
                         dateFormat,
                         timeOfExitFormat,
                         columnSeparator,
                         peopleWithinTargetAttendanceRate);
        }