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