feat(cards): Generate placeholders for cards without a pair

This commit is contained in:
Nicolai Ort 2024-12-03 19:20:28 +01:00
parent b179541532
commit f880e9f10c
Signed by: niggl
GPG Key ID: 13AFA55AF62F269F
4 changed files with 51 additions and 11 deletions

View File

@ -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
}

View File

@ -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"`
}

View File

@ -28,10 +28,12 @@
</head>
<body class="A4 landscape">
{{ range .CardSegments }}
<div class="sheet">
<div class="columns is-multiline">
{{ range .Cards }}
<div class="column is-half runnercard">
{{ if ne .Code "" }}
<p class="title is-5" style="text-align: center; padding-bottom: 0; margin-top: -0.75rem;">{{ $.EventName }}</p>
<p style="text-align: center; margin-top: -1.5rem; font-size: small;">{{ $.CardSubtitle }}</p>
<p style="font-size: small;">Mit Unterstützung von:</p>
@ -50,6 +52,7 @@
</div>
<p>{{ .Runner.LastName }}, {{ .Runner.FirstName }} {{ .Runner.MiddleName }}</p>
<p>{{ .Runner.Group.Name }}</p>
{{ end}}
</div>
{{ end }}
</div>
@ -58,16 +61,20 @@
<div class="columns is-multiline">
{{ range .CardsSwapped }}
<div class="column is-half runnercard" style="justify-content: center; align-items: center; text-align: center;">
{{ if ne .Code "" }}
<!--SPONSOR LOGO FIRST-->
<div style="height: 2cm; padding: 0 0 1cm 0">
<img style="object-fit: cover; max-height: 2cm;" src="data:image/png;base64,{{ sponsorLogo .ID }}" />
</div>
<img style="object-fit: cover; max-height: 6rem; position: relative;" src="data:image/png;base64,{{ barcode .Code $.BarcodeFormat $.BarcodePrefix }}" />
<img style="object-fit: cover; max-height: 6rem; position: relative;"
src="data:image/png;base64,{{ barcode .Code $.BarcodeFormat $.BarcodePrefix }}" />
<p style="font-size: 1rem; text-align: center; margin: 0; padding: 0;">{{ .Code }}</p>
{{ end }}
</div>
{{ end }}
</div>
</div>
{{ end}}
</body>
</html>

View File

@ -28,6 +28,7 @@
</head>
<body class="A4 landscape">
{{ range .CardSegments }}
<div class="sheet">
<div class="columns is-multiline">
{{ range .Cards }}
@ -68,6 +69,7 @@
{{ end }}
</div>
</div>
{{ end}}
</body>
</html>