Mercurial > gemma
annotate pkg/imports/report.go @ 5334:45805c454436 extented-report
Load users from database who should receive a report.
Generate the report.
TODO: Send the report by mail.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 01 Jun 2021 01:22:10 +0200 |
parents | 795a0a0b5047 |
children | dcd5692a2889 |
rev | line source |
---|---|
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1 // This is Free Software under GNU Affero General Public License v >= 3.0 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
2 // without warranty, see README.md and license for details. |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
3 // |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
4 // SPDX-License-Identifier: AGPL-3.0-or-later |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
5 // License-Filename: LICENSES/AGPL-3.0.txt |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
6 // |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
7 // Copyright (C) 2018 by via donau |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
8 // – Österreichische Wasserstraßen-Gesellschaft mbH |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
9 // Software engineering by Intevation GmbH |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 // |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 // Author(s): |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 package imports |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
15 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
16 import ( |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
17 "context" |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
18 "database/sql" |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 "errors" |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
20 "fmt" |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
21 "log" |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
22 "os" |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
23 "path/filepath" |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
24 "regexp" |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
25 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 "gemma.intevation.de/gemma/pkg/common" |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
27 "gemma.intevation.de/gemma/pkg/config" |
5329
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
28 "gemma.intevation.de/gemma/pkg/models" |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
29 "gemma.intevation.de/gemma/pkg/xlsx" |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
30 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
31 "github.com/360EntSecGroup-Skylar/excelize/v2" |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 ) |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
33 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
34 type Report struct { |
5329
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
35 models.QueueConfigurationType |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 Name string `json:"Name"` |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 const ReportJobKind JobKind = "report" |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
41 type reportJobCreator struct{} |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 |
5328
bc8c082487b2
Fixed compile errors. :-/
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5326
diff
changeset
|
43 func init() { RegisterJobCreator(ReportJobKind, reportJobCreator{}) } |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
44 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
45 func (reportJobCreator) Description() string { return "report" } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
46 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 func (reportJobCreator) AutoAccept() bool { return true } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
49 func (reportJobCreator) Create() Job { return new(Report) } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
50 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 func (reportJobCreator) Depends() [2][]string { return [2][]string{{}, {}} } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
52 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
53 func (reportJobCreator) StageDone(context.Context, *sql.Tx, int64, Feedback) error { |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
54 return nil |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
55 } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
56 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
57 func (r *Report) Description() (string, error) { return r.Name, nil } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
58 |
5328
bc8c082487b2
Fixed compile errors. :-/
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5326
diff
changeset
|
59 func (*Report) CleanUp() error { return nil } |
bc8c082487b2
Fixed compile errors. :-/
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5326
diff
changeset
|
60 |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
61 func (r *Report) MarshalAttributes(attrs common.Attributes) error { |
5329
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
62 if err := r.QueueConfigurationType.MarshalAttributes(attrs); err != nil { |
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
63 return err |
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
64 } |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
65 attrs.Set("name", r.Name) |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
66 return nil |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
67 } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
68 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
69 func (r *Report) UnmarshalAttributes(attrs common.Attributes) error { |
5329
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
70 if err := r.QueueConfigurationType.UnmarshalAttributes(attrs); err != nil { |
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
71 return err |
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
72 } |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
73 name, found := attrs.Get("name") |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
74 if !found { |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
75 return errors.New("missing 'name' attribute") |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
76 } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 r.Name = name |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
78 return nil |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
80 |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
81 func (r *Report) loadTemplate() (*excelize.File, *xlsx.Action, error) { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
82 path := config.ReportPath() |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
83 if path == "" { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
84 return nil, nil, errors.New("no report dir configured") |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
85 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
86 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
87 if stat, err := os.Stat(path); err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
88 if os.IsNotExist(err) { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
89 return nil, nil, fmt.Errorf("report dir '%s' does not exists", path) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
90 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
91 return nil, nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
92 } else if !stat.Mode().IsDir() { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
93 return nil, nil, fmt.Errorf("report dir '%s' is not a directory", path) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
94 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
95 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
96 // TODO: Prevent this earlier. |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
97 if match, _ := regexp.MatchString(`^[a-zA-Z0-9_]+$`, r.Name); !match { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
98 return nil, nil, errors.New("invalid report name") |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
99 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
100 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
101 xlsxFilename := filepath.Join(path, r.Name+".xlsx") |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
102 yamlFilename := filepath.Join(path, r.Name+".yaml") |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
103 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
104 for _, check := range []string{xlsxFilename, yamlFilename} { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
105 if _, err := os.Stat(check); err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
106 if os.IsNotExist(err) { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
107 return nil, nil, fmt.Errorf("'%s' does not exists", check) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
108 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
109 return nil, nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
110 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
111 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
112 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
113 template, err := excelize.OpenFile(xlsxFilename) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
114 if err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
115 return nil, nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
116 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
117 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
118 action, err := xlsx.ActionFromFile(yamlFilename) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
119 if err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
120 return nil, nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
121 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
122 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
123 return template, action, nil |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
124 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
125 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
126 const selectReportUsersSQL = ` |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
127 SELECT username, email_address |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
128 FROM users.list_users |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
129 WHERE report_reciever |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
130 ORDER BY country, username` |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
131 |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
132 func (r *Report) Do( |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
133 ctx context.Context, |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
134 importID int64, |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
135 conn *sql.Conn, |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
136 feedback Feedback, |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
137 ) (interface{}, error) { |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
138 |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
139 template, action, err := r.loadTemplate() |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
140 if err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
141 return nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
142 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
143 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
144 tx, err := conn.BeginTx(ctx, &sql.TxOptions{ReadOnly: true}) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
145 if err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
146 return nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
147 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
148 defer tx.Rollback() |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
149 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
150 type user struct { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
151 name string |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
152 email string |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
153 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
154 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
155 var users []user |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
156 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
157 if err := func() error { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
158 rows, err := tx.QueryContext(ctx, selectReportUsersSQL) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
159 if err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
160 return err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
161 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
162 defer rows.Close() |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
163 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
164 for rows.Next() { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
165 var u user |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
166 if err := rows.Scan(&u.name, &u.email); err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
167 return err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
168 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
169 users = append(users, u) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
170 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
171 return rows.Err() |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
172 }(); err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
173 return nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
174 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
175 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
176 if len(users) == 0 { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
177 feedback.Warn("No users found to send reports to.") |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
178 return nil, nil |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
179 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
180 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
181 if err := action.Execute(ctx, tx, template); err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
182 log.Printf("error: %v\n", err) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
183 return nil, fmt.Errorf("Generating report failed: %v", err) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
184 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
185 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
186 // TODO: Send report via email to users. |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
187 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
188 return nil, nil |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
189 } |