From 4e95341a65904d128da1109404631eeb44960b8e Mon Sep 17 00:00:00 2001 From: kevwhitt-hee Date: Tue, 12 Jul 2022 09:16:16 +0100 Subject: [PATCH 1/3] DLSV2-600 Populates a course name column to the exported sheet --- .../DataServices/CourseDataService.cs | 2 ++ .../Services/CourseDelegatesDownloadFileService.cs | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs index 5eafdf43db..3b5fac438e 100644 --- a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs @@ -812,6 +812,8 @@ public IEnumerable GetDelegatesOnCourseForExport(int cu { return connection.Query( $@"SELECT + ap.ApplicationName, + cu.CustomisationName, ca.CandidateID AS DelegateId, ca.CandidateNumber, ca.FirstName AS DelegateFirstName, diff --git a/DigitalLearningSolutions.Data/Services/CourseDelegatesDownloadFileService.cs b/DigitalLearningSolutions.Data/Services/CourseDelegatesDownloadFileService.cs index 9c4bd1a8b6..31cd3e3aff 100644 --- a/DigitalLearningSolutions.Data/Services/CourseDelegatesDownloadFileService.cs +++ b/DigitalLearningSolutions.Data/Services/CourseDelegatesDownloadFileService.cs @@ -33,6 +33,7 @@ public byte[] GetCourseDelegateDownloadFile( public class CourseDelegatesDownloadFileService : ICourseDelegatesDownloadFileService { + private const string CourseName = "Course name"; private const string LastName = "Last name"; private const string FirstName = "First name"; private const string Email = "Email"; @@ -321,7 +322,7 @@ DataTable dataTable ) { dataTable.Columns.AddRange( - new[] { new DataColumn(LastName), new DataColumn(FirstName), new DataColumn(Email) } + new[] { new DataColumn(CourseName), new DataColumn(LastName), new DataColumn(FirstName), new DataColumn(Email) } ); foreach (var prompt in registrationRegistrationPrompts.CustomPrompts) @@ -397,6 +398,7 @@ private static void SetCommonRowValues( DataRow row ) { + row[CourseName] = courseDelegate.CourseName; row[LastName] = courseDelegate.DelegateLastName; row[FirstName] = courseDelegate.DelegateFirstName; row[Email] = courseDelegate.DelegateEmail; @@ -414,7 +416,6 @@ DataRow row courseDelegate.DelegateRegistrationPrompts[prompt.RegistrationField.Id - 1]; } } - row[DelegateId] = courseDelegate.CandidateNumber; row[Enrolled] = courseDelegate.Enrolled.Date; row[LastAccessed] = courseDelegate.LastUpdated.Date; From e6105e9ffc96ea07228c013bfee578b721366a50 Mon Sep 17 00:00:00 2001 From: kevwhitt-hee Date: Tue, 12 Jul 2022 09:47:17 +0100 Subject: [PATCH 2/3] Update CourseDataService.cs --- DigitalLearningSolutions.Data/DataServices/CourseDataService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs index 3b5fac438e..48f2e90373 100644 --- a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs @@ -726,7 +726,7 @@ AND Progress.SubmittedTime > @threeMonthsAgo AND Applications.DefaultContentTypeID <> 4 GROUP BY Applications.ApplicationID", new - { brandId, threeMonthsAgo } + { brandId, threeMonthsAgo } ); return query.ToDictionary( entry => entry.ApplicationID, From d90e48abde2396ba3ce53a6c0078df182a5a7db7 Mon Sep 17 00:00:00 2001 From: kevwhitt-hee Date: Thu, 14 Jul 2022 08:55:52 +0100 Subject: [PATCH 3/3] DLSV2-600 Updates tests to handle new spreadsheet column --- .../DataServices/CourseDataServiceTests.cs | 2 + ...CourseDelegatesDownloadFileServiceTests.cs | 76 ++++++++++++++++-- ...urseDelegateExportAllDataDownloadTest.xlsx | Bin 11896 -> 12045 bytes ...seDelegateExportAllDataDownloadTestBU.xlsx | Bin 0 -> 11880 bytes ...DelegateExportCurrentDataDownloadTest.xlsx | Bin 11477 -> 11616 bytes 5 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 DigitalLearningSolutions.Data.Tests/TestData/CourseDelegateExportAllDataDownloadTestBU.xlsx diff --git a/DigitalLearningSolutions.Data.Tests/DataServices/CourseDataServiceTests.cs b/DigitalLearningSolutions.Data.Tests/DataServices/CourseDataServiceTests.cs index 0502613e04..2f388ba5cc 100644 --- a/DigitalLearningSolutions.Data.Tests/DataServices/CourseDataServiceTests.cs +++ b/DigitalLearningSolutions.Data.Tests/DataServices/CourseDataServiceTests.cs @@ -1007,6 +1007,8 @@ public void GetDelegatesOnCourseForExport_returns_expected_values() // Given var expectedFirstRecord = new CourseDelegateForExport { + CustomisationName = "Standard", + ApplicationName = "Entry Level - Win XP, Office 2003/07 OLD", IsDelegateActive = true, CandidateNumber = "PC97", CompleteBy = null, diff --git a/DigitalLearningSolutions.Data.Tests/Services/CourseDelegatesDownloadFileServiceTests.cs b/DigitalLearningSolutions.Data.Tests/Services/CourseDelegatesDownloadFileServiceTests.cs index 93061d725f..b811c32afe 100644 --- a/DigitalLearningSolutions.Data.Tests/Services/CourseDelegatesDownloadFileServiceTests.cs +++ b/DigitalLearningSolutions.Data.Tests/Services/CourseDelegatesDownloadFileServiceTests.cs @@ -26,6 +26,8 @@ public class CourseDelegatesDownloadFileServiceTests { new CourseDelegateForExport { + ApplicationName = "Course One", + CustomisationName = "v1", CandidateNumber = "TM68", DelegateFirstName = "Philip", DelegateLastName = "Barber", @@ -54,6 +56,8 @@ public class CourseDelegatesDownloadFileServiceTests }, new CourseDelegateForExport { + ApplicationName = "Course One", + CustomisationName = "v1", CandidateNumber = "ES1", DelegateFirstName = "Jonathan", DelegateLastName = "Bennett", @@ -82,6 +86,8 @@ public class CourseDelegatesDownloadFileServiceTests }, new CourseDelegateForExport { + ApplicationName = "Course One", + CustomisationName = "v1", CandidateNumber = "NB8", DelegateFirstName = "Erik", DelegateLastName = "Griffin", @@ -108,6 +114,66 @@ public class CourseDelegatesDownloadFileServiceTests Duration = 1, DiagnosticScore = 0, }, + new CourseDelegateForExport + { + ApplicationName = "Course Two", + CustomisationName = "v1", + CandidateNumber = "TM68", + DelegateFirstName = "Philip", + DelegateLastName = "Barber", + DelegateEmail = "mtc@.o", + IsDelegateActive = true, + IsProgressLocked = false, + LastUpdated = new DateTime(2018, 03, 08), + Enrolled = new DateTime(2012, 05, 24), + CompleteBy = null, + RemovedDate = null, + Completed = null, + AllAttempts = 1, + AttemptsPassed = 0, + RegistrationAnswer1 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + RegistrationAnswer2 = "xxxxxxx", + RegistrationAnswer3 = null, + RegistrationAnswer4 = null, + RegistrationAnswer5 = null, + RegistrationAnswer6 = null, + Answer1 = null, + Answer2 = null, + Answer3 = null, + LoginCount = 2, + Duration = 0, + DiagnosticScore = 0, + }, + new CourseDelegateForExport + { + ApplicationName = "Course Two", + CustomisationName = "v1", + CandidateNumber = "ES1", + DelegateFirstName = "Jonathan", + DelegateLastName = "Bennett", + DelegateEmail = "slumrdaiehn.b@g", + IsDelegateActive = true, + IsProgressLocked = false, + LastUpdated = new DateTime(2018, 03, 08), + Enrolled = new DateTime(2010, 09, 22), + CompleteBy = null, + RemovedDate = null, + Completed = new DateTime(2018, 03, 08), + AllAttempts = 1, + AttemptsPassed = 1, + RegistrationAnswer1 = "Senior Implementation and Business Change Manager", + RegistrationAnswer2 = "test2", + RegistrationAnswer3 = null, + RegistrationAnswer4 = null, + RegistrationAnswer5 = null, + RegistrationAnswer6 = null, + Answer1 = null, + Answer2 = null, + Answer3 = null, + LoginCount = 2, + Duration = 0, + DiagnosticScore = 0, + }, }; private ICourseAdminFieldsService courseAdminFieldsService = null!; @@ -143,7 +209,7 @@ public void GetDelegateDownloadFileForCourse_returns_expected_excel_data() ); A.CallTo(() => courseDataService.GetDelegatesOnCourseForExport(customisationId, centreId)) - .Returns(courseDelegates); + .Returns(courseDelegates.Where(c => c.ApplicationName == "Course One")); var centreRegistrationPrompts = new List { @@ -193,17 +259,17 @@ public void GetCourseDelegateDownloadFile_returns_expected_excel_data() Courses = new[] { new CourseStatisticsWithAdminFieldResponseCounts - { ApplicationName = "Course One", CustomisationId = 1 }, + { ApplicationName = "Course One", CustomisationName = "v1", CustomisationId = 1 }, new CourseStatisticsWithAdminFieldResponseCounts - { ApplicationName = "Course Two", CustomisationId = 2 }, + { ApplicationName = "Course Two", CustomisationName = "v1", CustomisationId = 2 }, }, } ); A.CallTo(() => courseDataService.GetDelegatesOnCourseForExport(1, centreId)) - .Returns(courseDelegates); + .Returns(courseDelegates.Where(c => c.ApplicationName == "Course One")); A.CallTo(() => courseDataService.GetDelegatesOnCourseForExport(2, centreId)) - .Returns(courseDelegates.Where(c => c.CandidateNumber != "NB8")); + .Returns(courseDelegates.Where(c => c.ApplicationName == "Course Two")); var centreRegistrationPrompts = new List { diff --git a/DigitalLearningSolutions.Data.Tests/TestData/CourseDelegateExportAllDataDownloadTest.xlsx b/DigitalLearningSolutions.Data.Tests/TestData/CourseDelegateExportAllDataDownloadTest.xlsx index a2333d4b52d62ec5e338eae95d2ed4462da400c2..2654052d408f5c41f402ebb289379b32cf488f62 100644 GIT binary patch delta 5439 zcmZ8_Wmwfs`|T#BbJHo^-65bfY#OAI?(XtOBPp<@L!>1)Eg&EQ5)#6uL8MEhYqN>t z^PF?u^Pc~Fn3?OkXYLPc?rW_z_lsOfWrTNAbJE;xoi934sT?gi=N zTnx9YtFz@?peE;x8BA<*^#L9e-Nee@^m6q-uxOl+3f}~s-7im>?#IXK5n_SL)V!?S z$&fuGI7WJKeKP2p3BYBchpXRx1}Uc+hxFy}#xh_kY-PXGSYaBtWu|oL*rLj>uI0;Z z;eF!}Wm@csW0^}(H}(wmrQW^HOUsH;97b|;FXT*wje*0d8*63-E{e71Fp;~+9n%dI zq`6RtULRemUgT^)GkpbG@>F9O&_;cq)(v(e@I4VMi)>hA1_DJ_8mFh&O_Zc-_sEjb zt(2J=>y)_#S&pGj{dDa_+NoLQuw|ppH%7Cbrk(28$>^e2JiA%j*bgZBtq!5Mo%LF- zd|zk?koO=Yw6K6*6!o&1{CCCLjz^7eJGO{76AwJYG>gkwA!<3ThpQb^niu?r#-g!T zbRI7Rrwqdyh$=VHq}a(=LY*~bkx1EnS*zzzbWYZ8fTi3TlO?J?1K}R4tlPBt{ppCd zo3phg5Dg*V>-f{}L3#87=K1hqOvKmu?5Vap&mSbRKtWaN2tCwUH0pZs0yQxJ!tf!6 z@m<*Rx^NZo{;%(vLt77$vKk{MIV7H7jE~}2PX=h9fWT#x7Z_g)4&C2>b%WZs$1wq} zb8j?^kJdT?m3gh*Dv1}yqkE5^zoee*yEne@WNDxwPV)TjL+q z?Il9p54oM;jVXN~D)ry&+3etzPb@v9l&ZHtj@(p(ChTr(@n}BS(zc@?d*`(kOst<4 zEN*T|_dcCn>5#9dN_V?uF>DpXgXF&AP7^jSNSSA)trw%~f?x2kLlmSVk`u@LvG5@F z-&nAQ##4`c1rSe~`><6|fqhv@iAhWlD4QAtq6C3JL2mqko<6R=PWJYGzWo0#f_y>l zZUqJwp398j@PA7E)N+|CFiCKg_~@#21P{TOl(D6ZKiU2L47oC9T6(*3?en6Jgv z>GJBAN`WppKt~paeaB|`tsAJA!Ko!)HD0tSSq4F<;s5PFJbZ zbN!1JLohQTnYwP1IZL*ED@bL5OEIy5`vPSW$PS1F%ue)AqI;-S;_7=&L~tnQBK5oupG_D1$`ARqHhr5E!B8e0+i8!$h%5Ga1p-m zSa8E1cJNLuu@1GmDH0dhZ}P6so3E6vr&^$$PGIktwP}iU|03)X+uiU=Kctq3c1~f& z0oRia5ab*Ui^A4vwxn5npmxB#qrzt2NF!3QD@t$5fmkU!pplfQJXf+zLzQC3@CMnz zgW{5ScrDeMDAS0#XL#H~)6(HF5{zn$B)5exp3~xzzH^skd>S(DOlzQrXEC3!6!~&| z*Rn?x5a{voZ-qZTmSwxYot6j3KH}^H zglW@R**`%EIy#&U)FuNBydHVlA9` z%(nhaoxsA*wouoyN|+EhXOlWlhgb^_ukP2T9ClAg4L{qfO>(Pfrf*Vp zBplv3IWow>kgpyiVa#;ENONh%q+E*=1AUYdl;@fxXPjk6QN_5$O5K+(q^i=hJWNHP)k zaq9=Y41~X3(xIn!Y{TQG<3H z@>7(qub$faH0(qQTIJWJ<_GNQLWV&5T=9$b_2j$^M^mvydx&S5K{#nH!f2{0aiGn-Pi6}>>&H9ni@YA5Gk|54f49NytN>M$i@KZ0M%q)0}%V|DF+Ww75q_s#VH zCiDn8yF(j3CuE$Ii*VD9ka=uUpBa~1ze2p+%D&8vNC_$Nr|K)8g-^4i7`J!k?^W zNFS!Pt~rPD1b?OKzHZy1cRArFfAXYg(&#&1Rgm|CjOHqyyV;q49~GZ@&bL3hK38!` zzf~DJ^2EKLGJnW`uuf}=J|`0*g_JaZPHizTyhQNdk>_ZkZmPX%_Bi_lkQ|oGKZ3Gc%;ikd*mi~;V)~oV}5bM?|oKW#ZMo++h zj+S?|7^9d0>-@tzLBz;(t7F7Oh!A**E0|E#i5BuYJvl%Kne>yYERt^Rpx`=L3@$O;64_Op^Ux07UJ0uh@t=Rs&75Ctv>g#Q<>ze4Ei7wl&5`;YpK z8JWE;5Cgw%n0br{a>PHBcdU@lTQr$bbp|`P>sjIFn7D>3d~?fHL>$YC3Bd9_#0uMV zgFwiIhr2><_TX9H9T}ooJx)FGPbU`fZ}f}|X!WkImsiZXv}ziw1fWr6M?iYZQO)5H zLxvFpRYwQ2qBQ8~(o8qJbCGE#D==pB>baQW7j<5;A?k{Qh$UrW^VS_AM~;hoN^i|r zX-2nTgeW6z4YK}JeT1ggS%GR+C23pg^Gc5-)<>_t2p5K0ul);!+UJ!o;jBiti?Rh- z>TOMP6cI^w7VwNPt-xq8EFfE$gz0jK98VMMUB=~XUi-lP&(M@@MK^n&w*MmlR32L%wV~WaY_?x`~XNOiQ)sFNIwvm zy?BR$_##Kz9)x+_yC!pL@o4KYoJZ^SoJzVw5M7*FAxnP1wM3DC)RFcVJ&izg#1^fl z<8?O-S$rahRXT`b$3K?wyc#F5PbdOYH%maz6_#5PFMU4S6dCxmH7;f(BXJ`doRfQ# ztCbv0{xwn{z!v8l!zI96cN;>SqZ5*R#il$?1g45dTb1a8^ruQ|zz?I5MQGTTpy2t_ zsH&AY_R#WJv9?0TbEQ;^@bNtbFPjWp3Dc=iR#DE@y7yUxrY_QZJv!2ujzu2=toSbh zO**iJ&U**kYN(UiY{foR1}!{ODip(kqDt=GrOH_5m7W5m@F`=&PpTx)Vgp z4Hr~CF|QNw7+yS#2r~x9s<5uVlSxIGlpQtb`~sJ5(7%=wd$M*=QmUzME%Y^Oq0(_R zx4;38@*~`PO)U}iZT0)442#(c0JeQFfG5DEx0$-X47WL$*!-ocBu!937ua1%sAu+O zrf|p;@(0gGA81i+_|O z-Tq-z!NK4dWKe5Y>X}oYtW@*-sV)(o1@tL{yXZDL`E%Q|*{u)d-~x0wKSv~+c5z4P z_ya1m4;ze)Lmj(^{`brE8hS&^1vF;N2t+*(Ad%B6b24T2mW!yEBO&(rn8D5dfUM7_ zN1gW2wO|=f>t9dnnw?E*h7A&>RC;?qli&uaA(wQ7`Ciw0X!GN~sjV`aBTY@B`?le7 z_FzHA96eSp!DqU2q;I19vqax}O`648?3u*i8BLy00E!`+yc8W2D^UUz{3US*?p#>wJZM z*J%c^0?!R>6#C4P{1YE1Ab@j<;LeujoiVuklCS+jeOBjtRBp8=-XPe5D&A`Y?=o3% zd26LAF3hg5C1lLMgjIPL3F~01uITcea~|3D467%nSXZA%j@7kNjq~ zkZg~+#vb|`a5&=H*G`>$=YCJ9%Stt7jPq^~x?!Z7sIuIp!yV0w56sO&)a96{7}h+1 zAIJqVjmv1Tq$biyl>p75WQmdXBfg}4&oJM{W-v}Tf$}JOb2}DWO>v(oyfqL=5H0V4 zH0OA@bVS1hom_{-)gQa_^!Yo;@lX>)y7*5OR4)+WGE55`poL zXF~(&XrQ5kL7319>?h5%3Uuzj{GT|@i~O4lXf}>?L5y`Q8{`0u^r_0>}3A&YUt51Mw zpvI*BWvW1}2cW1TA+v}z0*lk=xHMqL_LxZ}8aL&?xX&FD*q%@|Zd$_p3JY5b^x!p) z7Y#4tosEy&W;EhIZZ{uZt;sy+nyN{D-DkCpQ7~nS!zy-*`KoBa%?ZL6hG(Ol;kXpP zgHLv^J$E>O+UtbYh*@ENgoHCZoO-SI?g3%#QMNY-;PS9CTEYSLDgJfJiT?}3`Hg<7 zV-NKv6G;=;9lL)TId%I%eh{LElt0blS4Y=iC@wHD{%VR$I&^j)0&ZERYJ%r{M$A*R!R ziYJ+R9N+E;MAh@wm639@{%AKQ^|Q)bAuPT$%V>5E_u*X15>Y<P^Bg>gaoQ@7hZJnaqd_9#{>g}Z3vGacn0?8*pB zQox?)&ll6rL-Yip1C8ui;QpRkk-GHiSdk|Krm#N0x5LF^?`&dRW2M4cb!uCwG(&G+ zMlc2QLg!rYDr9AAM8n0DnOn$hyryQcNhh~LwqxgP@G1)Lld9g2apBb&Qff+v&dJYy zz-M)jM%|=;w2b$boJ?f#>9?cr^v>X0;c>>E_aLrF8k_9*H>jxmD(x7rd?ig~6r4Ue zD&e0bW7gHkVCYd4pFrd2O`5F&dZffha=pS5zHB9F7vU@b;DRPvgH z=I9dN!>8u`TuT{Uj%G{>93S0%-ILfa8ua z9$$=v=a(6BfA}MBFD^w?tN9ssWRZNXj5Xo+)$w>|-2~x@&}YvgnccD+H-A$1FH*C4 zBvUcPSjkT1Lf=Wc=ioQwN)x`!!EkDhDFWI&gKUb}y&NZAndLUL-(;US(vodUxTi*u zsn&-BI3j^+PB}z;rZpXeDnQo&9ffNTdI5<~v}h1t$8Hc|a##ABR8>x8yKC!w6h@3V zOcBas0SL##K?rQ=KG<4yBF_|ILE#{EP}E#55n~(rd&c+>`E0*gf%!)NPAoKpN;xHS z@mL*HeT8)XblwabjYSP^uc5at)fBPfJVsEvMFKBzI5E}Oc)SROq;MviqPIA69j^&5 z!G@e_@SGnKCNM%w>~ z=wCVo|G(hhofsW-mq#AejRDHVzzWskzz9n?IaovHUCMq6Z5>Hk!0EOh* zG;as<%9}#cWG^k{u)JYuTB!p;pLFwTDZp(!&xOF3m}|sc$$Y_vVftM-GCb*A#h=FZ zk{{26JpUSvano*=dNBEQU)%+(dFk<&bz?Q)eeX+w1j6U8U%B#X!n7@WpY0P$xC%ec zBQe?UCvkrj{M)Q5*-F{2O;9}O!f+br*kY~Un-?p)pP`c&y3T$B>v16Ts@A@e(%m59 z^vCGGFQ4L5teR3L7`X*4O?@;9k{?zX+EwK=j?|vx)ml>i@XMuWT+k+B3-1QI?A=Tk zmX2Pz(9d;3Y|W?4&du=Ca92rm^I$tiM)!}sm3v%4{;dcODS})@bIFk9LdfML4cm88z*M*M} z2dzZo?-yaFO=FWhTeeu)C(ULHAbaV8X33riMI)@Q@#EQGer=wC0`A>5^!4HoPBg~9 zsnPl~-&bBFje3Nv6eQeE$|rP$<5qk8?6PWOmkbU-bbNlAQuDYV?pD*1n1)i{4sWSA zr6pxz-4#_Yt}x;^_({|**ht`25i}vXI<-tqS=2ZNl z>KzDfrve#N+@W7hLlBp)AhPI?Q*}z1RMTDQhLi$*$pzJXK>{+jSX}yCk!f)75rGgL z5f*iE4BJb?Ef-bx9@b`VA16a!1$qg|MK?6t+g6En%OVtZC$-iv*Y<3}e3QN^S%wZ-Jvlq* zEd8=mvSHuujMDRf-3<&{+e;y2qnDO--R}e-M^tJ4LaX4@t>ZL$?3Qp>EiEx{nPEY= zJyW>fLyzZ~`)ZKwK2@WVav7M1(_6ya&m#41uI}tgfNbcmB$5PRWA!OsAQo=%v1Am6 z{+9~vGeDGhLB$NzfNHKeuuWe7T#F=hR?x|d?^#0FBC`^Vh3sN8iDbB2RtFy^UqPB6 z%Y$xa%78eGh9$NcWF;QpNJXQzc6yf^ddoktnH3ufd`DJq_0I1DU$Dx(p2!tOLPQj| zC{16NaOgFY5hd5g>gts02S=i^o?=d1HT#@ztabV{IC=;cWHOQm$6|eoHYt~>mxc$g zQ74CA@ufEG51mg6e8ij$TuBg&eRrke*b&q&m7??s6%hoUB;#!nNkEej|7Ed_G1kgL1ZvHM*UzDS9k>I8?{ zCX7Z!8)76?y%)zA8A!((D^a-#Tk-REK*^>9hL*?sAniOx$x3z1#K&i(ARXH}nFNkA zm{O#K_=SL^?>;pn_MFA?*B_;WT^(F`atS%L)@MNzT*-+&(CvBCsP*)|WM*B4q^R{& zc0bji*2`T~KFl~TFlXAzS2f>hq4j#G^6X^Dw>b$<^2HhjD3kY*;#M{W%jq~q@^z6z z6Ehp)JiXwjC-i%`iz#AlHwlt17x>`?tct0SWIkEN??;q!%L?7xV#Pt69n)x4v5w8r z`Nh2Zqg&sw!NE!qnd0sl9FDFNj8sR=#Dg_KqbuuXj(jKcitStNL0ZYBdj?RhG7IOn zlS^pO55UTLL`b?5Nv~c0XRg65lGJf?Z3|6kddEADUE1hQb-4H*DV1ME#5tWGYzIA2 zE~XBcw#vsW8GZ6+O3V}vJ7T^Vsncxv-l&QYPgsRwteC}xqz{qwI>qhd?}(LI{Ggeu zsc@fd;P*_g60$(v3epxoG3S>*tldqQn>nkh1&)>8|0XD(M!DgEzJY^YrvpyjVIm`d zNH_LnhnaU|PWdWwflvffVGc|Mo!yT(kNR3OTrni?VWUlM&^=;$jvM<0yY4htx%HpZ zjo}Xh>1TIKe>najH25x&9z?&S-m4-KW#$Y47K_SSxzWt&Yv-x78QMcmBvdad6!iCx zUDR)*8+Z2eQcdT%xD528H3IzDm~2hwvp|g1#%O|j8~_0Jzc<@5aoH}6k0inr{7XXU zxSoHsounq%gyL~Ph(kQxJY6)iBYVK*&=b$_u59P4?QA6?^swcf+3>0V>vwj)RE^d- zhLMMkZ_OSi`Qld5fd;$q*xVR5`Dn$xNd0EGlg=Ras@t*wj)vv5T0bJ3kH^Z(!KveRFiEQZFj?OF8cHnS z`(c#EQ=oI#1j27TGbQw7ef;`#g&sKU{O3)>Pw~l{@X6D#Vb+sQte!vsVBs+UK==po zcHnh$_i?atEv&sGI%cz$R!i5?R^nf4sr=C`H+oW-12=nZ2050@4bA zYi`#396@{?xw$&JHCZ_CO_ztauL2iGvQ1nLqxaI-GmDNmB%h>~R%W~|+gZ3>Sp(Gx z$?Ar2D!qld7jgT-10Ia0v&hT6h*Ri@L6+G?I2KuqLyp&ySkO9c8F1XJGXDF5ssx0i zAXvwq8t-E1m7;lE=uYN^iD^`GUzP;_ zZ;2FeBY7KNjb5c1oy+$3Uxdtu9DKEUNcv9KVvd*Pf1JlU`CZ^0-Ue4MvvS(3@`Tw! z!E)ZtfoA2Jl~ZH{<9;<4^x-HE7e~dGUwJU~;;cbYGY{v$W;_{J>`lkB9Lg*M3)M$I z%X?uAqL{$VBb3@zK1>31eR6SQ3u1YO8YBY`K_}-mJUST7LkI45EP^8E8+`3 zJQjbfUovcuE8X-=SJH@<@=z<;A}1?5MiU>kG_o0brZOe$tZbq0&~E-mTBw46XMThe zosyoWyyuW|B5CT`^3{+%OG7OWsAumKp)BhFEE`FUX)cze&TLk#UWYvmb15pUN`XD# zu*R;$n5f0piIFL48nyBgil#Fr62}%DRkP&4hnof^%drXq8rIw?VuQj z!mEiJWM0Y#685a+Lq`|aSs(Dkc3e!h44 zCBfaD7%qA)%i(VPM(pDBWgOA(xqIP>pIDbyeXYtt{Vv|;`X|Q|d{WN@S;Q)iLD{?2S`xaJQ=C$ zr({mH``hXBK@f^+PHvh&l!3_0V6}^u(8%4yfX*uY8U$p4+RKeUzin%O@Xijlk@`HD z=8}S%wDFp|^(wt2Fz30}oPXh!AKN!d6@S!*O2lkxn7}3aQp@hYtufmzXIUIu)oZ3t zQwVzwg!*l2UO+RX)c5ofnt(2DxjLnKIwNx;q`FMz^;`&!SaEOALF%i1t`Nk>NQgmv zPY2JG4+RUI`|;JMBV4S-arqInLb;sxGGV9T<%wzN#{1psT^c8efm7==eMM~fcw>4p z?7eX@Apv54W||H2Cn{V>gPMkq$B;HWcG%QyN)8r;E_Bs5-B3(JXx6+}c1}3PKdv@K z3c(lSE1&P+S}Q9v-;}&w>Jh!g^73pI)DWqb)7U}q96|2Mnmi{=>Mw24>g@zP0gqd7 ztVGYI*GyN&irDLabfYhJeh8d+qtxfmu*!NKE{kO7H|552!Wu*@bba`&v8dJk1S-Oh zjw`7SjYLZwT2M2zKb3~}H($o|nfGv22;49#9b$!1E3gmCG@+am_X_%kygtaUSKJH`ltKn*SEM*EUL)k3lF^S(KKG&cMg zpQ6e4sWuR=rJrSA@Q*NC!55gG!ixDwh7UPWUiB|Mh*NCx?6gRe6;s=*DpAUQ9=%G{ z@9Dp*E!oZ;b^}XzhYftvfi%D`v%-U7>dy0q9H!q- z$|zfyY%06FIKGheNuQ}RU;=K%w?sgF?Ltb^5B}~7+<{eID z+M{$knJ8-=l1OuiS%zyJbDY5jrn$a^ll>Qx>Y*%&$(X%>(GwERAw7E@%b#-terY=f ztaV2=K96jg6Q!e5C2;gXx}1iI%ukC26D<|8Cp(LiA1u$;^w+7mpUwBA{B#t!V|+sN zwARP%F&fN(+CBds8~M_@9s#?xjz98H(lOpZC#b`dt65E`;$iWxOTvdz+bPw(=#L+D z(EHBdch0?6;#6h1xvHFlYi=vi1iz}G=Cl1s&70wQn;&a8ijWRpbQM3|q~L0fo)Y&q zwQ=p7tO$MLAh;rOXI{9Vzw2qcXy5RGT!M{@#c2B+qod@6cZJn{1p$lhHI|gt6V`ic zV`&F+#EZSzJDIY!TX(QK z;w_u}9v_BTsChGPO}Ur(^PY&Xs%@Q)nhvU!dmge50W#h_gO{9S_Deh4J>fYxL{cScR znB&=^E~3MM+FEfS%hf8pJ=PN{dC1PZ6Q|idCu{Kbl`GX@;j}auGCLqTcyy_qMWsk7 zy#(CkT0~a=qWu-273Wf;5wFe~(zi_IOR$xKBXQY3g%4oz^xjeX5aP4uvpQ_?9y-tgX6_q$6VPfRw4yQKEZyQU_; z`5yOu`#HsjZ*$C)nXpQB$o#6M5i;T;I%Sk&NRi_aN1TtaS>@ee+C;25`(%Y+nH> zmqHW-0t0oGM=iJ4dp)S$+4is{S-yt1NdG3`>R%icvfXG}`{0AHdWI{8@GRDXok#0xOG ztAAHM=x^vc9@pQ$mG~Vi#eDPjt`PxakXNN|T26g5;B^ZPCyqsYwF2(>j@B72vUq)P zS<57Qm{0-Z$gna-0XU+aUp97a@cZyMIsF#h6dgHDnH0>QcmHbJ%lhl{0Oa75w1SxI zfh;yvrvR`}E#br|OiV3>Y{X01^NV004*q987HqJ|F-<2m}Ct3V;UH5pl40HM4g$ zQ1x;&bJ3&sw6i730|%x21ONp-|G(qEcm~Q^~Wm4i@bJ|N* z6C&X>#9Ag%vco+;EuW6Ff}jV<RO2J||16SMM;hnMiWFMJgqdHqG8vNf9pm>N zBN0+oFI&_a=z&y>k+|{bUg!fO$FpNXMNjZgK)HB>6Z-kW@UFlySE=V)ZnFLlShXPE z!<&z$$FzZk1YfX>S$%_r>1?D|=UUs;m^swnRxSC^sgWn&d>KTqQEaNcCzKjP4;>V0 z@m*kajp7fO)C5sfDdxvAhf^UkHlf^B8U?WFi#NNZIGdt{rJUV%%qlR}QxxkRZMHY! zby`Z2Q;!#0&$sB#o%e_KE;osJ6KqdT_n;NVGP_qj!1=evFw+O)!dg9vts~&~@If;B zRiz;raYHAtv#nQ55eT)U)1V6~M7A`vHU)f}*Q3&K84W0KZ*p58-Q)7}n@n2gJ)eel z^g_Q@sE5kAhs}KtROQPH7(nqqH2X!3k@ONs zL|LFDVS$=8a5l4bVW9tY{hwC6(I{vu&O~dF#^^P0U{DM3!Z7$U0=4_( zv{sF8D?w(2RgNmcsv9^y9VCrq`Ol>m?ZXR1aLFD{W}pwa7+Wk<`VQCO|@h8*V6D{UEnD*_hW_$`y-vY2PZKO4iqmSgiR_le0G5>LfqN8 z7PrzgNQ$B(Vo=pgw-WX7;kpag*pxN}8(q2B8*A=TQxsmBLRf2~&vWfmZ21|3*ma?&-9!4oOGokI;7jruLv^$_eTkU zSxV|~b5-qBsff{DKoER@-_O65T1Rz`4?1!};18R=VDs6o4D(UvzJFV08He5$l(0Tz z30|OPLl(CE4yEGTF2?3m5<2E#WdePk*C+TkAh9m zR-5H~er>+~g&D5a=&({_n!XYbdM#re@b82!~u75uo zqrKP^>YE-~XW!&WYUaJn@j`5#+01$uUre5A{>*QIl=xn!Q(r6AkpH8e@Pz#yX);ns z;t{tm0vpb=7ee0IohSF9&jcryR~rFLo0A9gIeDc{lh9R?0Af+o>ag;jy+F+Lv zc_S1Kr}I<6(yT~OkS4OlRhNvcqmAr zZB=-Vz05DbJ;K`zUyh-+e&WrC38^+jA>fyR6IN%i+0w6{Wpf#Bealrbs1qzBNGR7a zDW$f<%4F)C{bblkV^cN6v~14pUcB!met`28K!yI<<_*@eI5UY5XQ@ZMLBNzhki37V zcOZXq+6C~JW+26J0MH;ndjAmy{+;Ci3JD;<QuwkTl;k^J8d(*@; zx1D0w(C4j>=5k)6Hl6wRa6jq!NU4G(toE+S!>yu2hbbZU;_YHz$gCnh%T09X09#_zXzsYt}$Cx&tZ`f z?cK-v7o@unZ`q}Ypta@7O4Sy->rXVcu&N!6&9maH7yVDZM8YT+&e8-e%VfKZUbRu= ztmSBD;5D)fyTOJ`;gPkPlp?Qq2m1MbBa~Azrai);R_n*yOTcyYxp-cAEV-PuWv)nx2QQc1H z{)j9ba?o`)=dv_R=JcUYS!{+PTvtbk=@VGTqN>~M5OAi#cY?rpnTl4GCuy=vHDiJML|D{3)>~8ohN!!frkGwjHug{SJnSuI?KE2)ZNjjsK`zK0Ye2P zVk5J@t1Zxw*PGixh}9izfs;&4?>!TU^;Zt{FW>G{2>ivnI(Shw&w^-Sl{KaYha}VA zO9;aa3`Q%9AqLEYMM-h@swHStp}~ZDQbh<^<23MLB}xb%CcH&~@i~)>5HZOs4Xqm^ zC59Z4!kL+D2HIwdX}9u=!tI`TJ&$%jVf}1e-CPHxf!kuw>EZFNC%(+UyLSW=8p|N~ zb!dd8i?UJQcDA(zrxL4x)oa)Cd^m(P3_;8g0!FZi-Jg@ z1`u~3Q8goE$VBL}I>R%K^-nUN3)Q0}(JAfL+HLyM`1)Ha6`#p=v(CIN#zxaO?tC)! zySjfc614Na*tf-Gzn|iM;msaBsFGlC)b{7@+_=3xa!AjK+uvt)Ugq$d!$yqLI@Lk1 zD5$%C;dT!{`sq2(zhj$Mhfw=@l-D$O)Yp{d1H{1UetGm^+o<;d|6X~VZDk!ut)vCw z07kV3^)L#NnmI(gbRDGRmjytPx9`e!goK zLGMFMe8?G-rSB_+y=^VDIbw0ymFAZLqqK?f9ag)u1`+FNU5TXXcnJ~fDO5gk0S!0% zM<4z5a{RI<&AjD4+RruI^_5HK5b9{qxVE1lkS6Bm#9T&_i!_@kj8sjOtkPO^-S)8~TNRS{4v;Z?O2V#ieDg<82rzPME@kY&S|ptL@uPWzZc*gftdlNGF)iW1l98YcI& zGB%Te2UhHS0wX5zlgj-xv8l_lO0eO==bv!JlSeKvL}O$DylH@QUC@CrumKmUCEF=o z6#I`dVt!VQB)Qo#Pg&iKR}tSU`b+x6-7Hj5wb};_uArm8K~`M^N;mvAt_^)*NxOVp z1Va4A(^}w93&34e=#=4zFmw%*}BvrkM>bJ&3C8iNq zmbX#fX(g}C6PC_6#**_3nYdn-^4L*&7=6!zBMS>r@R6SiW2n-~!wJsu<<1=@u~W9$Slnbb{oC*yhPD7?>l)@jHdO+-{Y&FF(Qf`NHf6EcCT-js`w zk^%aY#ZFmya)GVF;oH*M+N!n`koTDQwsbdJk7JHu&E7{s-^YoO6VJ=hRT(ruMQh_F zSfh11Klq(YdIuDAX@y{qNz$YvVe2mWzONwOwL0=Y^Qln`VkxuRU1IyMDuidGO?KJf5pBR&lLifz!)MY?rpok>NRAw(9> za(W7b)5>fV{X%wPy~uB`puR>C1BuQ#6W@ z4X{Jpuaw4HuYfV<*Uf6|YoYn%c^fd-e}k`uh{B{k-F+vX$lakgs+9#>1!8ZhPX>F_ zuXSia-)FYW-xtomil5C@dGy|;By;MMtL>Up1nCYzcSaY}V1)2JJ|Xhv#4$nPdp!>; z%EoPx&|{_PzG<68etgbA*0p*OmD8b~VwT3mnvr9@>7C)?D|Rl|gm|QMuaFbeo%Azq z0-Ef5$!n+Y-yy$6s%@g48D$h%Yxv&wv*N8E-MM$6}`^gY!(HjnUw6j-=@qn zUh)Dk;n0^?vMB!~XLa3dJWQ#&<VsDm+oJL%rwaxqPpc@^3$NzO?U8dtv>&0mT`A!lNSBThiL z&vk-En9|6`w$QNdjzN*KFq2xH<$Yq;%8GBlt3T=GLxQiRE-#;&o3B1zUNsAbw%Ljf zXH*_qWrd)h)_m4Y8`hGm2!nfFOkM{w*Tj+aTwUHJ7y9KPs7oGyAXIfplboG(xQql` z(>%1s zG!@8*t{30!lX<>TlmB3lOmW6~8B?9uh0(<<7h41)UfzBawQTx*(lf@VCkd06{a zOK3n;RZ2HQrv_>}zPi0K5dPg)D9S)Zj+p{VFh~#P=jC0JV8|MK=jYEK;^cNNzCtzg zRMVxd`1k1-s8in;=6~AfdyrLNqk*d8njiC;UX1$k>CF0RSi%k=jbHL5@FFfMeu0qU zGH`MCK~V?!an^8&23+agAUlC1rlbx5)HvsY7_Mw)vYlqs@pab{Wn%(8_X@Vbz$C}M z>zLJ{mdj49i}Tsl%I;l^p5}awThr84I!@xXY1F~BCHDYUf4ae!?*hDMo$nkk*>%t2 zG7_(?UqE!vI+Kn3-v(?qjI!x)yZ{sHzvocqSb%@@+)x~ zR@aNmXGeQiHT@FsIEs}XPfk_6A`9tOcw}9eA^nccka_kN44Z|l;(pD?j)<}4!v{6> zicBbDgQfo6Tfh0iEPcn5$b(d>jJ#87L4uUR(sbUUy}5_wHKHmuQS}fSDHYc|I`5=+ zFM5-isKp+L$vB8ardfGVCYktsc6WjhR#mDZWHHmyu*RRt;u`H($<%BxVczExX_^S7 zi-L8@CmVo~MED)zd{fOM4nvP&adFlhK>cyNqC_qC20`_~QB1lDagO`ko6l~u{NoX+ z=4Z7sYZr({%^5bD{ax1v&uA$wQjl{qNu!wHy^L#pgNXXBOn#=H{K;gss7;I&8m00$ zj=Kxn@T4cyjFlP#xUJ6l)SShoUBc_AkA9CZ8?>FI(y7zZqlR;zmU8xvl}gvl?8C$G z56fw-UQTnMp=2zXqfld_T-5 zFJ_Fwgsom;lzCG~Be`P+fGeWisAvDARks!V#8DdPkQ);iFqRmVke?W$^P)i0Ck}gD zkiE7L@>1bfR9b}@2vOKw+Q4L1~5U5xDyme4a*g(ASeAD^K#3QU!cgNm!tIMqpP@4B$ad; z7~r|m@Z%Aq^G?g(W+(O6_411eh`gK19+YV0*G1@<73*&_nl$g}TftEA!k+W3<{Bx6 z`1G!3JqZnhKurLXjKliy>E!!N2DYJUJvlzd&2A^!$dQ3%FE@w;&*=R?PO=jcRp!!( z-4WbeD)Z6E14bp^?G5*c^5yQ)bNJB)d)%X3_1bNj4bH=or~m2J%*eCjK!Xt4^5YlJ zP~UFc9=^;^aG_;-LmP#85;dfEEeol6ViuoH?BPGPZMVnHb}n(kJw9?nKh0#?K91aT zUte&>ApD$pW*^;xxVi0WkPhf}^t{qMKO1EfB4#BwkR#C6?vxsT3WDbK0v%(RJpAW% zBkH|k+5@oGr3KtMLHkpnmPXEIrYf$^R`wRZb(*X?WWU6S)QY($K zK&8M^o771lplB8a+4*xK4aM`r8#cU-tG*VFS=t>D*jp$w%WB9y1Rfg*R|U^mj_L%pM=3yM{1gPn(Y7LF;Npp%K1S zQu*#GPPdDh=0}%x8fs$YQi56eY${z_r3)z>XvEclIl6pME7VXMoZ&!LCo!s~ZKRIo z^CUV>;pwIgYJ49qpcUKELO}&xk2!T@qYO} zmOX#Zg?Xx`B&2w(9xe*x!3Z}S3!*P6)`k&*4DEncMa}y&fhHKLiHGED2mzenRqr%y zZbi0fqfXHo_9)+&%4DHN#wc&`kG9U0q9U_(iR*=KkvnfWFIS0b!sWATTi_@gQQgTC zXV{T_g-sef?ZM8;Mog%eBd60UCQG9^Y&74y;O0BL_>Ia+b@}40l3#_24&Zeg(81V4 z^fu15Iek%_S8gZZV0wxvC=U*Q5;`%##A_xLPU^0|iRv=ype2o9NR*&o|JaTudCsccMc9~H$~l0 zYj*g`{1d_jRfZ~tIbOcJy)y!GN%+>Xm_84B>GtnDc*&nKoNG~g5@v+n#?G+)Q zExRfe&^YbEC4F8|%P4S{o(y@*(&)tGstg@77%wVX7<7xnFPTQKcMa0)PTULSn7>=Z zGM}0ovo3yn{G(-UjE{@sCf=8w#8)T^9Q%mIxix5rS6H`)tE|*`9jqvJGW+_HVi|KW z3uU@hSCSg+es`WaZNK3=js`68f^+4*YU%^Jj7j6US>`zhUKYN=OVZ$;?=k%rUe%YG zgNLK;{Fe{s1@qYqjRfoHp_|CmjCYmhURN$bzC5=D)zP=_MW)XXxL*>vadbHpgCiR( zYt{3yHMh!|CEEk7fm_RxJ(cAiqBamQUzd@gqS4D&Ed?>-NvYO!Ct zR${-NH%8e_aH9eT{fxQq$dH4)MBdLYzI}5S!mZ#|o6Uxu7eGn$CIa*yhT*&pI^akC zI}N^ezdd9H62uJl|2tq;BV*tSiQ)I~M};|6#vz{(ssDuL$fKIm4Kdjw$66UVQ8J~u ztn^6Q$E{PU+!%L3e$jH~q#dk)p(~^f#p)na{38z0#(t4Cqix zm}+)c=t7mIf~Q%FM3}1~g&PSNraM=W#%OJT8fo&|+k8VR@5|&Lk2-iabdE&Rr(r{H zx;4||le(uxUUh2W1#VFvFC3Y|52Z<@PNN-9N|?_YZz_>B-kP8IVtTcvxsFLkJlm1H zWykV}Pk=yJ>E-g~i45;(|7syRoYTCz@xeUy)J;lFZ{sOWAt|w(TpuIWKbE&3v@fL@ zUBLtQ47>%`dkVI7##o9*?(O|;=}eN+t`t@vPX#8U<$FwqboYmk(bhwa!lCodd}o_z zwDpk_e4Yjt&aLAm!34If%N&nJxpSKP?w0d5HBPAf6tr)3cCSEM3eFjp$!(S!BRlm3 zg*DhUR4h!bi5ws-WlwC3yRWlr_`n|UU0TT}A&+=O9w1%A(1kz_>cPPVMuIx%yiv|4 z%&pgLtxp+>#us8kKy#JuN6gU=GPa%(;LDoUaWHYLloPzcW{}S4e5%8dr*|#QOf@sW z-o>&BX}DxPAfs7IIGgWKq~(=LTJ?UN8IY1^0b43X!-P;e0AJE8y;B;{(nE&s>s~$h z(xSObF+fI5Jg?r^VvA`m*^}vP7TO%`ZY6j^MYUEmj@~y)9W(qrCnes^QcOxMZ{VKcxxCwzf8bnyv%gK~ zu()kve9Zf-Yiw(R5!T|2BqMGW<%E>yYpuYbBiE3{lNa~-h1S>8DMqdPI<4i4DcU13 zDSo^T1nmW>ZUp{I@`Lfu%lq%dDsQEUAoP@%a9u}arWn4s$OW<#W#&lBXru1EGpfsE zXyI5j@AmMS68J}zMJWaE3Id(21TafM25$eEI+!RrJ2<*9m^e6_{n@njzg<7z)P*GI z$#gTKg`GgWhz!2VDl(H7UJCqf?@FYZ;fa}8M^`Q-f--lsmgTPVfpFc-bB)()RElY- zjC?WBt#*ctL@J78ycJ!!O6F2~Y)c1?YpmW-t}Is+%F$9?&j5W{aaG&%YX!(pvPR1I z`uyc&%dNItES`3dUR@L%?vS!s>YeV1${Hizq1k{s*0#s6IdWy>Ei!?yE27YL*?PD$M)(%mxQE%{LN8_&5(r6J;Ueq3+p zof=}argi&9gHUpCGsU=zX_P_(vw5t@*Cl^o*_5zaM>h}pQi&FXn3$|%NFa)qQz$X$ zQagM?c)(R!%R01~+_O+mt|INsEwu*wxaG$NIy1Osu*piUwX)@$DNi3^A;{+G|8jo- zEV};PxqF4k0K$N@g9bWyq<^QKk)z}PSO=urpGS70(68>2&=Z<7LXx%5DuR}3T;gT! z$WTZr+UtjIKvbuDc0Hs&kU~vXN2FC2 z7rX4cmZoUSk}#21!tNZ(HF$2wc`FxARHxJI;G+g?nDQpBgw&gTi$jOhkB|MCJmNHu?)-#jk5Hd_= zd#jvZVH2KMpz-C2wUe@8dNe=SYF>VEh)?v3+()+o2$N|svOYMMC$l4306BuK^kQ z2X{e0>3~__Kli%+>s$S6{D;n0MVbEu_|L|>e;NK7>w$v!w>G@jhOe8E{xV$vCMK_1 zlU^JDXRF6wrT{=A%x~lWqw(W4&g=dEzmR?c*J}S)H^6I@*Bdi`p`@eyMtQwW^BUlF z3GFWc24G_X@NfK8PWX literal 0 HcmV?d00001 diff --git a/DigitalLearningSolutions.Data.Tests/TestData/CourseDelegateExportCurrentDataDownloadTest.xlsx b/DigitalLearningSolutions.Data.Tests/TestData/CourseDelegateExportCurrentDataDownloadTest.xlsx index 6a38ff4980d9480fa7285c89db7b210d5a538019..2b65a06b0792fc734bf2c886cd2693aa0884e09f 100644 GIT binary patch delta 5011 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 D7|=`Y delta 4879 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%0AL{Mjq8q&dO9NBOo@+V4syRaWeT`<|i%WCs!=$ ze@HQr+RX2T%*kE&SZaUm%4E{|I{gx~e|-P_6U)U76}CFjTJg%q59EB{yOtMSJGA)6 zw05VzzFuo?S#E@!i<{|Yt7w*0(g;O$XVL)|`5`cyF1iqDiu6|(I_5{!$yqW-aG|*Q zo$2IjVgxJM%8f{UC3_zJoxsHclC15X8d+&&c_q#9tp3LvTSB{cdn4mqzZ40E)V*AO z`j}xfpvrcr1dpPjCs?P9%E#bpE^@ByQ@ic={E;C*VS&VEW0SnFodfHQ3jZYN&v9&v zTs5yPvr5F;q5rJVmv?9_|KqmscFKTO?Hbanpccf1Q%$=d2ZCj1GAQ5)H3GHsJBaGX z&hHCrYL(7mwwS@r_D06W7E+HK$U;4{5QU$(7Z*ZmP_#CU^khCB*Fm_+xxny15`@>@ z2v(ARo>UzNNrwGs>N$8uc(GE6m9FzA72 zO@}`sHG~lxNvffyk?hqrp-^q}z_laR| z5gKnYE@C9z{F81SMs;cT;^exphOh04An4-Y(js)}747G3d?ERwGbU<+ zt@(#iHBkYD_)AWSP=WhCFF$D?Hq0eYA~0E~$nuKK$4~5c7&wD9KHc+la z_9ME&m}wq5HHlSNEWxClO~&{}!t`B`a!K6uGgX={%12KH?J_}fdBmq@J zAS3#$r9fdDv#e5=Rdb_?PsN%mE(N@Jxdp;ELE2jV%Wdt=BYYHZbh*OYef7Wc=|f%X zTS@9fr@mUs!u8K7`~LvEFZ8F_Vw2K9-7f)lvP{u^z~lEb>{%N*CWLN@@3vNai37=a zBu(s`8MG!}gw_?m@kYFnKnD$7N0r7(P5z<%7rU&i+IR?H_@L3(JsdUZPl>`Y+)>mph)!uk&{X~4g z5)*ikq&x?=2Q|68G6Hlqyko(l-EHMH1S~>qew(D`9gLVW^)u&Ws9I~{2{dQ|cw>sP zi(6Gh^Bt5oG+FTyhh!=S?tHJd(H>H{J6CU~$KiWpmtR|2&4_(_mucKL)Om>2oY<*$ z!reQzN@a9C9YeUBZZ_h^=GOu&Efw==5+iqFJ)`I%K|?%{T^hfk-GwvOsj zN5W`4f!G6QQ4KMzk`Y|Oi9;yL>iDX!*+jz@^qv1FLG64mk>?9>DY>=j>0E@vq=L5y z-`=AjsWCIVXR;^D6H{J>ZTAEu%}~F5hd}WXUQlvqbm(_=axD4OKMrJcBsV z& zT-QRCQHWbg@{VPp%1g0h*(-2Wl+a$Fk-d{Qu}Jo3 zz1lW~K+n{%#J#neDXfS&V~I)BV?;w&%Ar&}uKDU2w-H5}W$+RUq>hu4B_SkU{bH{f zhg~`XOtY~l(ob}~Mc^`U<7=g^odJ!gcq_)@p)(z_|K(Hbp_{<(z}#Oy^C+)CL9jV_ zaAC3jzE=;9M9Y=OP^7B)PyLX_1xaI;S4l0>jZ)2B?Z?oA&IC6?0i^nJ<^vCBAFZ6h z%vrCv3=ZLFabCCxygw`{>G|qM+H2Q#hTtvsLtzo6!4#TgEx29|MLg2(;QD%hm>2Lb zWu$l|@c!T5kSCuuekTY3KrMn8QIY}_%zvwF0D%4$K!4i_35t@G5yi{ThZBI(=jY-1 z?-cQ`DfR8j|4kTCi~O`qe