/// <summary> /// Internal method for ExportAttendance(). /// </summary> /// <param name="modifiedSince">The modified since.</param> private void ExportAttendance_Internal(DateTime modifiedSince) { using (var dtAttendance = GetTableData(SqlQueries.ATTENDANCE)) { var dtAttendance_AssignedIds = dtAttendance.Select("Attendance_ID IS NOT NULL").CopyToDataTable_Safe(dtAttendance); var dtAttendance_NullIds = dtAttendance.Select("Attendance_ID IS NULL").CopyToDataTable_Safe(dtAttendance); var uniqueAttendanceIds = new List <int>(); // Process rows with assigned Attendance_ID values, first, to ensure their AttendanceId is preserved. foreach (DataRow row in dtAttendance_AssignedIds.Rows) { var importAttendance = F1Attendance.Translate(row, uniqueAttendanceIds); if (importAttendance != null) { ImportPackage.WriteToPackage(importAttendance); } } // Process remaining rows without assigned Attendance_ID values. These records will have AttendanceId // values generated by an MD5 hash of the Individual_ID, GroupId, and StartDateTime. Collisions for // that hash are relatively common and in cases where that occurs, a random value will be used, instead. foreach (DataRow row in dtAttendance_NullIds.Rows) { var importAttendance = F1Attendance.Translate(row, uniqueAttendanceIds); if (importAttendance != null) { ImportPackage.WriteToPackage(importAttendance); } } // Cleanup - Remember not to Clear() any cached tables. dtAttendance.Clear(); GC.Collect(); } }
/// <summary> /// Internal method for ExportAttendance(). /// </summary> /// <param name="modifiedSince">The modified since.</param> private void ExportAttendance_Internal(DateTime modifiedSince) { using (var dtAttendance = GetTableData(SqlQueries.ATTENDANCE)) { foreach (DataRow row in dtAttendance.Rows) { var importAttendance = F1Attendance.Translate(row); if (importAttendance != null) { ImportPackage.WriteToPackage(importAttendance); } } // Cleanup - Remember not to Clear() any cached tables. dtAttendance.Clear(); GC.Collect(); } }
/// <summary> /// Exports the contributions. /// </summary> /// <param name="modifiedSince">The modified since.</param> public override void ExportAttendance(DateTime modifiedSince) { try { using (var dtAttendance = GetTableData(SQL_ATTENDANCE)) { foreach (DataRow row in dtAttendance.Rows) { var importAttendance = F1Attendance.Translate(row); if (importAttendance != null) { ImportPackage.WriteToPackage(importAttendance); } } } } catch (Exception ex) { ErrorMessage = ex.Message; } }
/// <summary> /// Internal method for ExportAttendance(). /// </summary> /// <param name="modifiedSince">The modified since.</param> private void ExportAttendance_Internal(DateTime modifiedSince) { var dtAttendance = _db.Table("Attendance").Data; var attendanceData_AssignedIds = dtAttendance.AsEnumerable() .Where(r => r.Field <DateTime?>("Start_Date_Time") != null) .Where(r => r.Field <int?>("Individual_Instance_ID") != null) .Select(r => new AttendanceDTO { IndividualId = r.Field <int>("Individual_ID"), AttendanceId = r.Field <int>("Individual_Instance_ID"), GroupId = r.Field <int?>("RLC_ID"), StartDateTime = r.Field <DateTime>("Start_Date_Time"), EndDateTime = r.Field <DateTime?>("Check_Out_Time"), CheckedInAs = r.Field <string>("CheckedInAs"), JobTitle = r.Field <string>("Job_Title") }).Distinct().ToList(); var attendanceData_NullIds = dtAttendance.AsEnumerable() .Where(r => r.Field <DateTime?>("Start_Date_Time") != null) .Where(r => r.Field <int?>("Individual_Instance_ID") == null) .Select(r => new AttendanceDTO { IndividualId = r.Field <int>("Individual_ID"), AttendanceId = null, GroupId = r.Field <int?>("RLC_ID"), StartDateTime = r.Field <DateTime>("Start_Date_Time"), EndDateTime = r.Field <DateTime?>("Check_Out_Time"), CheckedInAs = r.Field <string>("CheckedInAs"), JobTitle = r.Field <string>("Job_Title") }).Distinct().ToList(); var groupAttendanceData = _db.Table("GroupsAttendance").Data.AsEnumerable() //.Where( r => r.Field<bool>( "IsPresent" ) != false ) //ToDo: This should be uncommented when F1 updates the data set. .Select(r => new AttendanceDTO { IndividualId = r.Field <int>("Individual_ID"), AttendanceId = null, GroupId = r.Field <int?>("GroupID"), StartDateTime = r.Field <DateTime>("AttendanceDate"), EndDateTime = r.Field <DateTime?>("EndDateTime"), CheckedInAs = r.Field <string>("CheckedInAs"), JobTitle = r.Field <string>("Job_Title"), }).Distinct().ToList(); attendanceData_NullIds = attendanceData_NullIds.Concat(groupAttendanceData).ToList(); var uniqueAttendanceIds = new List <int>(); // Process rows with assigned Individual_Instance_ID values, first, to ensure their AttendanceId is preserved. foreach (var attendance in attendanceData_AssignedIds) { var importAttendance = F1Attendance.Translate(attendance, uniqueAttendanceIds); if (importAttendance != null) { ImportPackage.WriteToPackage(importAttendance); } } // Process remaining rows without assigned Individual_Instance_ID values. These records will have AttendanceId // values generated by an MD5 hash of the Individual_ID, GroupId, and StartDateTime. Collisions for // that hash are relatively common and in cases where that occurs, a random value will be used, instead. foreach (var attendance in attendanceData_NullIds) { var importAttendance = F1Attendance.Translate(attendance, uniqueAttendanceIds); if (importAttendance != null) { ImportPackage.WriteToPackage(importAttendance); } } }