Skip to content

Commit 7647e65

Browse files
committed
feat: use zpastudent for primuss-data emails
1 parent 7351f3a commit 7647e65

5 files changed

Lines changed: 62 additions & 92 deletions

File tree

cmd/email.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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, emailAddresses, updated, run)
50+
err = plexams.SendGeneratedExamMail(context.Background(), ancode, updated, run)
5151
if err != nil {
5252
log.Fatalf("got error: %v\n", err)
5353
}
@@ -137,14 +137,12 @@ cover-pages [all|<teacherid>] --- send emails with externally generated cove
137137
}
138138
},
139139
}
140-
run bool
141-
emailAddresses bool
142-
updated bool
140+
run bool
141+
updated bool
143142
)
144143

145144
func init() {
146145
rootCmd.AddCommand(emailCmd)
147146
emailCmd.Flags().BoolVarP(&run, "run", "r", false, "really send")
148-
emailCmd.Flags().BoolVarP(&emailAddresses, "emailAddresses", "e", false, "send email addresses")
149147
emailCmd.Flags().BoolVarP(&updated, "updated", "u", false, "updated data")
150148
}

plexams/email_generated.go

Lines changed: 56 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
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,

plexams/tmpl/generatedExamEmail.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ geben Sie mir bitte sofort Bescheid, damit ich sie in der Planung berücksichtig
2929

3030
Anmeldungen:
3131
{{- range .StudentRegs }}
32-
- {{ .Name }}
32+
- {{ .Name }} {{ if ne .ZpaStudent nil }}({{ .ZpaStudent.Gender }}) <{{ .ZpaStudent.Email }}>{{ end }}
3333
{{- end}}
3434

3535
{{if ne (len .Ntas) 0 -}}

plexams/tmpl/generatedExamEmailHTML.tmpl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ geben Sie mir bitte sofort Bescheid, damit ich sie in der Planung berücksichtig
3838
{{ range .StudentRegs }}
3939
<li>
4040
{{ .Name }}
41+
{{ if ne .ZpaStudent nil }}({{ .ZpaStudent.Gender }}) <{{ .ZpaStudent.Email }}>{{ end }}
4142
</li>
4243
{{end}}
4344
</ol>

plexams/tmpl/generatedExamMarkdown.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
{{ if ne (len .StudentRegs) 0 }}
44
## Studiengang {{ .Exam.Program }}
55
{{range $i, $reg := .StudentRegs }}
6-
{{ add $i 1 }}. {{ $reg.Name }}
6+
{{ add $i 1 }}. {{ $reg.Name }} {{ if ne .ZpaStudent nil }}({{ .ZpaStudent.Gender }}) <{{ .ZpaStudent.Email }}>{{ end }}
77
{{- end}}
88

99
{{if ne (len .Ntas) 0 -}}

0 commit comments

Comments
 (0)