Files
kgpz_web/xmlmodels/issues.go
2025-02-17 21:42:20 +01:00

83 lines
1.5 KiB
Go

package xmlmodels
import (
"encoding/json"
"encoding/xml"
"strconv"
)
const (
ISSUE_TYPE = "issue"
)
type Issue struct {
XMLName xml.Name `xml:"stueck"`
Number Nummer `xml:"nummer"`
Datum KGPZDate `xml:"datum"`
Von int `xml:"von"`
Bis int `xml:"bis"`
Additionals []Additional `xml:"beilage"`
Identifier
AnnotationNote
}
type Nummer struct {
No int `xml:",chardata"`
Corrected string `xml:"korrigiert,attr"`
}
type Additional struct {
XMLName xml.Name `xml:"beilage"`
Nummer int `xml:"nummer,attr"`
Von int `xml:"von"`
Bis int `xml:"bis"`
}
func (i Issue) Name() string {
return "issue"
}
func (i Issue) Keys() []string {
res := make([]string, 0, 2)
res = append(res, i.Reference())
date := i.Datum.When.String()
if date != "" {
res = append(res, date)
}
return res
}
func (i Issue) Year() int {
return i.Datum.When.Year
}
func (i Issue) Reference() string {
return strconv.Itoa(i.Datum.When.Year) + "-" + strconv.Itoa(i.Number.No)
}
func (i Issue) String() string {
data, _ := json.MarshalIndent(i, "", " ")
return string(data)
}
func (i Issue) Readable(_ *Library) map[string]interface{} {
ret := map[string]interface{}{
"ID": i.ID,
"Number": i.Number.No,
"Year": i.Datum.When.Year,
"Date": i.Datum.When.String(),
}
for k, v := range i.AnnotationNote.Readable() {
ret[k] = v
}
return ret
}
func (i Issue) Type() string {
return ISSUE_TYPE
}