diff --git a/handlers/card.go b/handlers/card.go index 25020dc..b351296 100644 --- a/handlers/card.go +++ b/handlers/card.go @@ -47,8 +47,7 @@ func GenerateCard(c *fiber.Ctx) error { } genConfig := &models.CardTemplateOptions{ - Cards: cardRequest.Cards, - CardsSwapped: invertCardArrayItems(cardRequest.Cards), + CardSegments: splitCardSegments(cardRequest.Cards), EventName: "Event name", CardSubtitle: "Card subtitle", BarcodeFormat: "ean13", @@ -74,10 +73,38 @@ func GenerateCard(c *fiber.Ctx) error { return c.Send(pdf) } -func invertCardArrayItems(cards []models.Card) []models.Card { +func invertCardArrayItemPairs(cards []models.Card) []models.Card { inverted := make([]models.Card, 0) - for i := len(cards) - 1; i >= 0; i-- { + for i := 0; i < len(cards); i += 2 { + if i+1 < len(cards) { + inverted = append(inverted, cards[i+1]) + } inverted = append(inverted, cards[i]) } return inverted } + +func splitCardSegments(cards []models.Card) []models.CardTemplateSegment { + cardSegments := make([]models.CardTemplateSegment, 0) + const currentCards = 0 + for i := 0; i < len(cards); i += 10 { + segmentLength := 10 + if len(cards)-i < 10 { + segmentLength = len(cards) - i + } + segment := cards[i : i+segmentLength] + if segmentLength%2 != 0 { + segment = append(segment, models.Card{ + ID: 0, + Enabled: false, + Runner: models.Runner{}, + Code: "", + }) + } + cardSegments = append(cardSegments, models.CardTemplateSegment{ + Cards: segment, + CardsSwapped: invertCardArrayItemPairs(segment), + }) + } + return cardSegments +} diff --git a/models/card.go b/models/card.go index 0acfd17..0e2d58d 100644 --- a/models/card.go +++ b/models/card.go @@ -13,10 +13,14 @@ type Card struct { } type CardTemplateOptions struct { - Cards []Card `json:"cards"` - CardsSwapped []Card `json:"cards_swapped"` - EventName string `json:"event_name"` - CardSubtitle string `json:"card_subtitle"` - BarcodeFormat string `json:"barcode_format"` - BarcodePrefix string `json:"barcode_prefix"` + CardSegments []CardTemplateSegment `json:"card_segments"` + EventName string `json:"event_name"` + CardSubtitle string `json:"card_subtitle"` + BarcodeFormat string `json:"barcode_format"` + BarcodePrefix string `json:"barcode_prefix"` +} + +type CardTemplateSegment struct { + Cards []Card `json:"cards"` + CardsSwapped []Card `json:"cards_swapped"` } diff --git a/templates/card/de.html b/templates/card/de.html index e1075e4..8e606d3 100644 --- a/templates/card/de.html +++ b/templates/card/de.html @@ -28,10 +28,12 @@
+ {{ range .CardSegments }}{{ $.EventName }}
{{ $.CardSubtitle }}
Mit Unterstützung von:
@@ -50,6 +52,7 @@{{ .Runner.LastName }}, {{ .Runner.FirstName }} {{ .Runner.MiddleName }}
{{ .Runner.Group.Name }}
+ {{ end}}{{ .Code }}
+ {{ end }}