@@ -2842,6 +2842,8 @@ private void AddFamilyAttendance( Group family, XElement elemFamily, RockContext
28422842 /// <param name="rockContext">The rock context.</param>
28432843 private void CreateAttendance ( ICollection < GroupMember > familyMembers , DateTime startingDate , DateTime endDate , int pctAttendance , int pctAttendedRegularService , int scheduleId , int altScheduleId , Dictionary < Guid , List < Attendance > > attendanceData , RockContext rockContext )
28442844 {
2845+ var generatedAttendanceCodes = attendanceData . SelectMany ( kvp => kvp . Value ) . Select ( a => a . AttendanceCode . Code ) . ToList ( ) ;
2846+
28452847 // for each weekend between the starting and ending date...
28462848 for ( DateTime date = startingDate ; date <= endDate ; date = date . AddDays ( 7 ) )
28472849 {
@@ -2887,9 +2889,10 @@ private void CreateAttendance( ICollection<GroupMember> familyMembers, DateTime
28872889 // Only create one attendance record per day for each person/schedule/group/location
28882890 AttendanceCode attendanceCode = new AttendanceCode ( )
28892891 {
2890- Code = GenerateRandomCode ( _securityCodeLength ) ,
2892+ Code = GenerateRandomCode ( _securityCodeLength , generatedAttendanceCodes ) ,
28912893 IssueDateTime = _args . AttendanceCodeIssuedDateTime ?? RockDateTime . Now ,
28922894 } ;
2895+ Trace . WriteLine ( $ "Creating Attendance Code { attendanceCode . Code } ." ) ;
28932896
28942897 var attendance = attendanceService . AddOrUpdate ( member . Person . PrimaryAliasId , checkinDateTime , item . GroupId , item . LocationId , scheduleId , 1 , _kioskDeviceId , null , null , null , null ) ;
28952898 attendance . AttendanceCode = attendanceCode ;
@@ -2908,12 +2911,24 @@ private void CreateAttendance( ICollection<GroupMember> familyMembers, DateTime
29082911 /// A little method to generate a random sequence of characters of a certain length.
29092912 /// </summary>
29102913 /// <param name="len">length of code to generate</param>
2914+ /// <param name="existingCodes">The existing codes that have already been generated.</param>
29112915 /// <returns>a random sequence of alpha numeric characters</returns>
2912- private static string GenerateRandomCode ( int len )
2916+ private static string GenerateRandomCode ( int len , List < string > existingCodes )
29132917 {
2914- string chars = "BCDFGHJKMNPQRTVWXYZ0123456789" ;
2915- var code = Enumerable . Range ( 0 , len ) . Select ( x => chars [ _random . Next ( 0 , chars . Length ) ] ) ;
2916- return new string ( code . ToArray ( ) ) ;
2918+ string randomCode ;
2919+
2920+ do
2921+ {
2922+ string chars = "BCDFGHJKMNPQRTVWXYZ0123456789" ;
2923+ var code = Enumerable . Range ( 0 , len ) . Select ( x => chars [ _random . Next ( 0 , chars . Length ) ] ) ;
2924+
2925+ randomCode = new string ( code . ToArray ( ) ) ;
2926+
2927+ } while ( existingCodes . Contains ( randomCode ) ) ;
2928+
2929+ existingCodes . Add ( randomCode ) ;
2930+
2931+ return randomCode ;
29172932 }
29182933
29192934 /// <summary>
0 commit comments