55 "context"
66 "fmt"
77 "html/template"
8+ txttmpl "text/template"
89 "time"
910
1011 "github.com/jordan-wright/email"
@@ -14,7 +15,7 @@ import (
1415 "github.com/theckman/yacspin"
1516)
1617
17- func (p * Plexams ) SendGeneratedExamMail (ctx context.Context , ancode int , emailAddresses , updated , run bool ) error {
18+ func (p * Plexams ) SendGeneratedExamMail (ctx context.Context , ancode int , updated , run bool ) error {
1819 generatedExam , err := p .GeneratedExam (ctx , ancode )
1920 if err != nil {
2021 log .Error ().Err (err ).Int ("ancode" , ancode ).Msg ("cannot get generated exam" )
@@ -34,7 +35,7 @@ func (p *Plexams) SendGeneratedExamMail(ctx context.Context, ancode int, emailAd
3435 teachersMap := make (map [int ]* model.Teacher )
3536 teachersMap [teacher .ID ] = teacher
3637
37- err = p .sendGeneratedExamMail (generatedExam , teachersMap , emailAddresses , updated , run )
38+ err = p .sendGeneratedExamMail (generatedExam , teachersMap , updated , run )
3839 if err != nil {
3940 log .Error ().Err (err ).Int ("ancode" , generatedExam .Ancode ).Msg ("cannot send email" )
4041 }
@@ -61,7 +62,7 @@ func (p *Plexams) SendGeneratedExamMails(ctx context.Context, emailAddresses, ru
6162 }
6263
6364 for _ , exam := range generatedExams {
64- err = p .sendGeneratedExamMail (exam , teachersMap , emailAddresses , false , run )
65+ err = p .sendGeneratedExamMail (exam , teachersMap , false , run )
6566 if err != nil {
6667 log .Error ().Err (err ).Int ("ancode" , exam .Ancode ).Msg ("cannot send email" )
6768 }
@@ -70,7 +71,7 @@ func (p *Plexams) SendGeneratedExamMails(ctx context.Context, emailAddresses, ru
7071 return nil
7172}
7273
73- func (p * Plexams ) sendGeneratedExamMail (exam * model.GeneratedExam , teachersMap map [int ]* model.Teacher , emailAddresses , updated , run bool ) error {
74+ func (p * Plexams ) sendGeneratedExamMail (exam * model.GeneratedExam , teachersMap map [int ]* model.Teacher , updated , run bool ) error {
7475 cfg := yacspin.Config {
7576 Frequency : 100 * time .Millisecond ,
7677 CharSet : yacspin .CharSets [69 ],
@@ -130,7 +131,7 @@ func (p *Plexams) sendGeneratedExamMail(exam *model.GeneratedExam, teachersMap m
130131 Teacher : teacher ,
131132 PlanerName : p .planer .Name ,
132133 HasStudentRegs : hasStudentRegs ,
133- }, emailAddresses , updated )
134+ }, updated )
134135 if err != nil {
135136 log .Error ().Err (err ).Msg ("cannot send email" )
136137 return err
@@ -151,7 +152,7 @@ type GeneratedExamMailData struct {
151152 HasStudentRegs bool
152153}
153154
154- func (p * Plexams ) sendGeneratedExamMailToTeacher (to string , generatedExamMailData * GeneratedExamMailData , emailAddresses , updated bool ) error {
155+ func (p * Plexams ) sendGeneratedExamMailToTeacher (to string , generatedExamMailData * GeneratedExamMailData , updated bool ) error {
155156 log .Debug ().Interface ("to" , to ).Msg ("sending email" )
156157
157158 tmpl , err := template .ParseFS (emailTemplates , "tmpl/generatedExamEmail.tmpl" )
@@ -187,96 +188,66 @@ func (p *Plexams) sendGeneratedExamMailToTeacher(to string, generatedExamMailDat
187188 }
188189
189190 attachments := make ([]* email.Attachment , 0 , 1 )
191+ var attachment * email.Attachment
190192
191193 if generatedExamMailData .HasStudentRegs {
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- }
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;Gender;E-Mail;Studiengang;Gruppe\n " ),
199+ HTMLRelated : false ,
200+ }
201201
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 ,
222- }
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+ gender := ""
207+ email := ""
223208
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- ))... )
209+ if studentReg .ZpaStudent != nil {
210+ gender = studentReg .ZpaStudent .Gender
211+ email = studentReg .ZpaStudent .Email
251212 }
213+
214+ attachment .Content = append (attachment .Content ,
215+ []byte (fmt .Sprintf ("=\" %s\" ;%s;%s;%s;%s;%s\n " ,
216+ studentReg .Mtknr ,
217+ studentReg .Name ,
218+ gender ,
219+ email ,
220+ studentReg .Program ,
221+ studentReg .Group ,
222+ ))... )
252223 }
253224 }
254- attachments = append (attachments , attachment )
255225
256- tmpl , err = template .New ("generatedExamMarkdown.tmpl" ).Funcs (template.FuncMap {
257- "add" : func (a , b int ) int {
258- return a + b
259- },
260- }).ParseFS (emailTemplates , "tmpl/generatedExamMarkdown.tmpl" )
261- if err != nil {
262- return err
263- }
264- bufMD := new (bytes.Buffer )
265- err = tmpl .Execute (bufMD , generatedExamMailData )
266- if err != nil {
267- return err
268- }
226+ }
227+ attachments = append (attachments , attachment )
269228
270- attachment = & email.Attachment {
271- Filename : fmt .Sprintf ("Anmeldungen-%d.md" , generatedExamMailData .Exam .Ancode ),
272- ContentType : "text/plain; charset=\" utf-8\" " ,
273- Header : map [string ][]string {},
274- Content : bufMD .Bytes (),
275- HTMLRelated : false ,
276- }
277- attachments = append (attachments , attachment )
229+ txttmpl , err := txttmpl .New ("generatedExamMarkdown.tmpl" ).Funcs (template.FuncMap {
230+ "add" : func (a , b int ) int {
231+ return a + b
232+ },
233+ }).ParseFS (emailTemplates , "tmpl/generatedExamMarkdown.tmpl" )
234+ if err != nil {
235+ return err
236+ }
237+ bufMD := new (bytes.Buffer )
238+ err = txttmpl .Execute (bufMD , generatedExamMailData )
239+ if err != nil {
240+ return err
241+ }
278242
243+ attachment = & email.Attachment {
244+ Filename : fmt .Sprintf ("Anmeldungen-%d.md" , generatedExamMailData .Exam .Ancode ),
245+ ContentType : "text/plain; charset=\" utf-8\" " ,
246+ Header : map [string ][]string {},
247+ Content : bufMD .Bytes (),
248+ HTMLRelated : false ,
279249 }
250+ attachments = append (attachments , attachment )
280251
281252 return p .sendMail ([]string {to },
282253 nil ,
0 commit comments