Skip to content

Commit 1e099df

Browse files
committed
feat: add email addresses to csv
1 parent 3db2d67 commit 1e099df

2 files changed

Lines changed: 72 additions & 30 deletions

File tree

cmd/email.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ cover-pages [all|<teacherid>] --- send emails with externally generated cove
3737
log.Fatal("need ancode or all")
3838
}
3939
if args[1] == "all" {
40-
err := plexams.SendGeneratedExamMails(context.Background(), run)
40+
err := plexams.SendGeneratedExamMails(context.Background(), false, run)
4141
if err != nil {
4242
log.Fatalf("got error: %v\n", err)
4343
}
@@ -47,7 +47,7 @@ cover-pages [all|<teacherid>] --- send emails with externally generated cove
4747
fmt.Printf("cannot use %s as ancode", args[1])
4848
os.Exit(1)
4949
}
50-
err = plexams.SendGeneratedExamMail(context.Background(), ancode, updated, run)
50+
err = plexams.SendGeneratedExamMail(context.Background(), ancode, emailAddresses, updated, run)
5151
if err != nil {
5252
log.Fatalf("got error: %v\n", err)
5353
}
@@ -137,12 +137,14 @@ cover-pages [all|<teacherid>] --- send emails with externally generated cove
137137
}
138138
},
139139
}
140-
run bool
141-
updated bool
140+
run bool
141+
emailAddresses bool
142+
updated bool
142143
)
143144

144145
func init() {
145146
rootCmd.AddCommand(emailCmd)
146147
emailCmd.Flags().BoolVarP(&run, "run", "r", false, "really send")
148+
emailCmd.Flags().BoolVarP(&emailAddresses, "emailAddresses", "e", false, "send email addresses")
147149
emailCmd.Flags().BoolVarP(&updated, "updated", "u", false, "updated data")
148150
}

plexams/email_generated.go

Lines changed: 66 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)