/// <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();
            }
        }
Exemplo n.º 2
0
        /// <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();
            }
        }
Exemplo n.º 3
0
        /// <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;
            }
        }
Exemplo n.º 4
0
        /// <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);
                }
            }
        }