@@ -14,7 +14,7 @@ import (
1414 "github.com/theckman/yacspin"
1515)
1616
17- func (p * Plexams ) SendGeneratedExamMail (ctx context.Context , ancode int , updated bool , run bool ) error {
17+ func (p * Plexams ) SendGeneratedExamMail (ctx context.Context , ancode int , emailAddresses , updated , run bool ) error {
1818 generatedExam , err := p .GeneratedExam (ctx , ancode )
1919 if err != nil {
2020 log .Error ().Err (err ).Int ("ancode" , ancode ).Msg ("cannot get generated exam" )
@@ -34,14 +34,14 @@ func (p *Plexams) SendGeneratedExamMail(ctx context.Context, ancode int, updated
3434 teachersMap := make (map [int ]* model.Teacher )
3535 teachersMap [teacher .ID ] = teacher
3636
37- err = p .sendGeneratedExamMail (generatedExam , teachersMap , updated , run )
37+ err = p .sendGeneratedExamMail (generatedExam , teachersMap , emailAddresses , updated , run )
3838 if err != nil {
3939 log .Error ().Err (err ).Int ("ancode" , generatedExam .Ancode ).Msg ("cannot send email" )
4040 }
4141 return nil
4242}
4343
44- func (p * Plexams ) SendGeneratedExamMails (ctx context.Context , run bool ) error {
44+ func (p * Plexams ) SendGeneratedExamMails (ctx context.Context , emailAddresses , run bool ) error {
4545 generatedExams , err := p .GeneratedExams (ctx )
4646 if err != nil {
4747 log .Error ().Err (err ).Msg ("cannot get generated exams" )
@@ -61,7 +61,7 @@ func (p *Plexams) SendGeneratedExamMails(ctx context.Context, run bool) error {
6161 }
6262
6363 for _ , exam := range generatedExams {
64- err = p .sendGeneratedExamMail (exam , teachersMap , false , run )
64+ err = p .sendGeneratedExamMail (exam , teachersMap , emailAddresses , false , run )
6565 if err != nil {
6666 log .Error ().Err (err ).Int ("ancode" , exam .Ancode ).Msg ("cannot send email" )
6767 }
@@ -70,7 +70,7 @@ func (p *Plexams) SendGeneratedExamMails(ctx context.Context, run bool) error {
7070 return nil
7171}
7272
73- func (p * Plexams ) sendGeneratedExamMail (exam * model.GeneratedExam , teachersMap map [int ]* model.Teacher , updated bool , run bool ) error {
73+ func (p * Plexams ) sendGeneratedExamMail (exam * model.GeneratedExam , teachersMap map [int ]* model.Teacher , emailAddresses , updated , run bool ) error {
7474 cfg := yacspin.Config {
7575 Frequency : 100 * time .Millisecond ,
7676 CharSet : yacspin .CharSets [69 ],
@@ -130,7 +130,7 @@ func (p *Plexams) sendGeneratedExamMail(exam *model.GeneratedExam, teachersMap m
130130 Teacher : teacher ,
131131 PlanerName : p .planer .Name ,
132132 HasStudentRegs : hasStudentRegs ,
133- }, updated )
133+ }, emailAddresses , updated )
134134 if err != nil {
135135 log .Error ().Err (err ).Msg ("cannot send email" )
136136 return err
@@ -151,7 +151,7 @@ type GeneratedExamMailData struct {
151151 HasStudentRegs bool
152152}
153153
154- func (p * Plexams ) sendGeneratedExamMailToTeacher (to string , generatedExamMailData * GeneratedExamMailData , updated bool ) error {
154+ func (p * Plexams ) sendGeneratedExamMailToTeacher (to string , generatedExamMailData * GeneratedExamMailData , emailAddresses , updated bool ) error {
155155 log .Debug ().Interface ("to" , to ).Msg ("sending email" )
156156
157157 tmpl , err := template .ParseFS (emailTemplates , "tmpl/generatedExamEmail.tmpl" )
@@ -189,28 +189,68 @@ func (p *Plexams) sendGeneratedExamMailToTeacher(to string, generatedExamMailDat
189189 attachments := make ([]* email.Attachment , 0 , 1 )
190190
191191 if generatedExamMailData .HasStudentRegs {
192- attachment := & email.Attachment {
193- Filename : fmt .Sprintf ("Anmeldungen-%d.csv" , generatedExamMailData .Exam .Ancode ),
194- ContentType : "text/csv; charset=\" utf-8\" " ,
195- Header : map [string ][]string {},
196- Content : []byte ("Mtknr;Name;Studiengang;Gruppe\n " ),
197- HTMLRelated : false ,
198- }
192+ var attachment * email.Attachment
193+ if ! emailAddresses {
194+ attachment = & email.Attachment {
195+ Filename : fmt .Sprintf ("Anmeldungen-%d.csv" , generatedExamMailData .Exam .Ancode ),
196+ ContentType : "text/csv; charset=\" utf-8\" " ,
197+ Header : map [string ][]string {},
198+ Content : []byte ("Mtknr;Name;Studiengang;Gruppe\n " ),
199+ HTMLRelated : false ,
200+ }
199201
200- for _ , primussExam := range generatedExamMailData .Exam .PrimussExams {
201- for _ , studentReg := range primussExam .StudentRegs {
202- // force Excel/Numbers to treat the field as text with leading zeros:
203- // write the Mtknr as an Excel formula: ="000123"
204- attachment .Content = append (attachment .Content ,
205- []byte (fmt .Sprintf ("=\" %s\" ;%s;%s;%s\n " ,
206- studentReg .Mtknr ,
207- studentReg .Name ,
208- studentReg .Program ,
209- studentReg .Group ,
210- ))... )
202+ for _ , primussExam := range generatedExamMailData .Exam .PrimussExams {
203+ for _ , studentReg := range primussExam .StudentRegs {
204+ // force Excel/Numbers to treat the field as text with leading zeros:
205+ // write the Mtknr as an Excel formula: ="000123"
206+ attachment .Content = append (attachment .Content ,
207+ []byte (fmt .Sprintf ("=\" %s\" ;%s;%s;%s\n " ,
208+ studentReg .Mtknr ,
209+ studentReg .Name ,
210+ studentReg .Program ,
211+ studentReg .Group ,
212+ ))... )
213+ }
214+ }
215+ } else {
216+ attachment = & email.Attachment {
217+ Filename : fmt .Sprintf ("Anmeldungen-%d.csv" , generatedExamMailData .Exam .Ancode ),
218+ ContentType : "text/csv; charset=\" utf-8\" " ,
219+ Header : map [string ][]string {},
220+ Content : []byte ("Mtknr;Name;E-Mail;Studiengang;Gruppe\n " ),
221+ HTMLRelated : false ,
211222 }
212- }
213223
224+ for _ , primussExam := range generatedExamMailData .Exam .PrimussExams {
225+ for _ , studentReg := range primussExam .StudentRegs {
226+ zpaStudentReg , err := p .GetStudents (context .Background (), studentReg .Mtknr )
227+ studentEmail := "unbekannt"
228+ if err != nil {
229+ log .Debug ().Err (err ).Str ("mtknr" , studentReg .Mtknr ).Msg ("cannot get zpa student registration" )
230+ } else {
231+ if len (zpaStudentReg ) == 0 {
232+ log .Debug ().Str ("mtknr" , studentReg .Mtknr ).Msg ("no zpa student registration found" )
233+ studentEmail = "nicht im ZPA gefunden"
234+ } else if len (zpaStudentReg ) > 1 {
235+ log .Debug ().Str ("mtknr" , studentReg .Mtknr ).Int ("count" , len (zpaStudentReg )).Msg ("multiple zpa student registrations found" )
236+ studentEmail = "mehr als ein Studierenden mit der selben Matrikelnummer im ZPA gefunden"
237+ } else {
238+ studentEmail = zpaStudentReg [0 ].Email
239+ }
240+ }
241+ // force Excel/Numbers to treat the field as text with leading zeros:
242+ // write the Mtknr as an Excel formula: ="000123"
243+ attachment .Content = append (attachment .Content ,
244+ []byte (fmt .Sprintf ("=\" %s\" ;%s;%s;%s;%s\n " ,
245+ studentReg .Mtknr ,
246+ studentReg .Name ,
247+ studentEmail ,
248+ studentReg .Program ,
249+ studentReg .Group ,
250+ ))... )
251+ }
252+ }
253+ }
214254 attachments = append (attachments , attachment )
215255
216256 tmpl , err = template .New ("generatedExamMarkdown.tmpl" ).Funcs (template.FuncMap {
0 commit comments