示例#1
0
        public async Task <byte[]> GetAttendanceReport(AttendanceReportRequest request)
        {
            var sql = @"
        SELECT
          student.[FirstName],
          student.[LastName], 
          attendanceStatus.[Status],
          attendance.[MeetDay]
        FROM [dbo].[Attendance] attendance
        INNER JOIN [dbo].[Student] student ON student.[StudentId] = attendance.[StudentId]
        INNER JOIN [dbo].[AttendanceStatus] attendanceStatus ON attendanceStatus.[AttendanceStatusId] = attendance.[StatusId]
        WHERE attendance.[ProgramId] = @ProgramId
        AND (
            @StartDate IS NULL 
            AND 1=1 
            
            OR attendance.[MeetDay] >= @StartDate 
        )
        AND (
            @EndDate IS NULL
            AND 1=1

            OR attendance.[MeetDay] <= @EndDate
        )
      ";


            using (var connection = _iocDbConnectionFactory.GetReadOnlyConnection())
            {
                var report = await connection.QueryAsync <AttendanceReport>(sql, request);

                var studentAttendanceReportDictionary = GetStudentAttendanceRecordDictionary(report);

                using (var memoryStream = new MemoryStream())
                {
                    using (var streamWriter = new StreamWriter(memoryStream))
                    {
                        streamWriter.WriteLine(GetAttendanceReportHeaderRow(report.Select(record => record.MeetDay).Distinct()));

                        foreach (var student in studentAttendanceReportDictionary)
                        {
                            streamWriter.WriteLine(GetStudentAttendanceRow(student));
                        }

                        streamWriter.Flush();

                        return(memoryStream.ToArray());
                    }
                }
            }
        }
示例#2
0
 public async Task <ActionResult> GetProgramAttendanceReport(AttendanceReportRequest request)
 {
     return(File(await _studentService.GetAttendanceReport(request), "application/octet-stream", "AttendanceReport.csv"));
 }