diff --git a/backend/pdfrender/pagination.go b/backend/pdfrender/pagination.go
index 9b7b440..e099fd6 100644
--- a/backend/pdfrender/pagination.go
+++ b/backend/pdfrender/pagination.go
@@ -281,7 +281,7 @@ func (p *Paginator) applyFilter(items interface{}, filter string) interface{} {
include := false
switch filter {
case "learned":
- include = skill.IsLearned && skill.Category != "Sprache"
+ include = (skill.IsLearned || skill.Category == "Waffenfertigkeit") && skill.Category != "Sprache"
case "unlearned":
include = !skill.IsLearned && skill.Category != "Sprache"
case "language", "languages":
diff --git a/backend/pdfrender/pagination_helper.go b/backend/pdfrender/pagination_helper.go
index 794adef..d7c78d2 100644
--- a/backend/pdfrender/pagination_helper.go
+++ b/backend/pdfrender/pagination_helper.go
@@ -92,7 +92,7 @@ func PreparePaginatedPageData(viewModel *CharacterSheetViewModel, templateName s
for _, skill := range viewModel.Skills {
if skill.Category == "Sprache" {
languageSkills = append(languageSkills, skill)
- } else if skill.IsLearned {
+ } else if skill.IsLearned || skill.Category == "Waffenfertigkeit" {
learnedSkills = append(learnedSkills, skill)
}
}
diff --git a/backend/pdfrender/weaponskills_page2_test.go b/backend/pdfrender/weaponskills_page2_test.go
new file mode 100644
index 0000000..55615cc
--- /dev/null
+++ b/backend/pdfrender/weaponskills_page2_test.go
@@ -0,0 +1,146 @@
+package pdfrender
+
+import (
+ "testing"
+
+ "bamort/models"
+)
+
+func TestWeaponSkillsAppearInSkillsList(t *testing.T) {
+ char := &models.Char{
+ BamortBase: models.BamortBase{
+ ID: 1,
+ Name: "Test Fighter",
+ },
+ Fertigkeiten: []models.SkFertigkeit{
+ {
+ BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Klettern"}},
+ Fertigkeitswert: 10,
+ Category: "Körper",
+ },
+ },
+ Waffenfertigkeiten: []models.SkWaffenfertigkeit{
+ {
+ SkFertigkeit: models.SkFertigkeit{
+ BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Langschwert"}},
+ Fertigkeitswert: 12,
+ },
+ },
+ {
+ SkFertigkeit: models.SkFertigkeit{
+ BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Dolch"}},
+ Fertigkeitswert: 8,
+ },
+ },
+ },
+ }
+
+ vm, err := MapCharacterToViewModel(char)
+ if err != nil {
+ t.Fatalf("MapCharacterToViewModel failed: %v", err)
+ }
+
+ // Should have 3 skills: 1 regular + 2 weapon skills
+ expectedSkillCount := 3
+ if len(vm.Skills) != expectedSkillCount {
+ t.Errorf("Expected %d skills, got %d", expectedSkillCount, len(vm.Skills))
+ for i, s := range vm.Skills {
+ t.Logf(" Skill %d: %s (Category: %s)", i, s.Name, s.Category)
+ }
+ }
+
+ // Check that weapon skills are present
+ foundLangschwert := false
+ foundDolch := false
+ for _, skill := range vm.Skills {
+ if skill.Name == "Langschwert" && skill.Category == "Waffenfertigkeit" {
+ foundLangschwert = true
+ if skill.Value != 12 {
+ t.Errorf("Langschwert value: expected 12, got %d", skill.Value)
+ }
+ }
+ if skill.Name == "Dolch" && skill.Category == "Waffenfertigkeit" {
+ foundDolch = true
+ if skill.Value != 8 {
+ t.Errorf("Dolch value: expected 8, got %d", skill.Value)
+ }
+ }
+ }
+
+ if !foundLangschwert {
+ t.Error("Langschwert weapon skill not found in Skills list")
+ }
+ if !foundDolch {
+ t.Error("Dolch weapon skill not found in Skills list")
+ }
+}
+
+func TestWeaponSkillsAppearOnPage2(t *testing.T) {
+ char := &models.Char{
+ BamortBase: models.BamortBase{
+ ID: 1,
+ Name: "Test Fighter",
+ },
+ Fertigkeiten: []models.SkFertigkeit{
+ {
+ BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Klettern"}},
+ Fertigkeitswert: 10,
+ Category: "Körper",
+ },
+ },
+ Waffenfertigkeiten: []models.SkWaffenfertigkeit{
+ {
+ SkFertigkeit: models.SkFertigkeit{
+ BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Langschwert"}},
+ Fertigkeitswert: 12,
+ },
+ },
+ {
+ SkFertigkeit: models.SkFertigkeit{
+ BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Dolch"}},
+ Fertigkeitswert: 8,
+ },
+ },
+ },
+ }
+
+ vm, err := MapCharacterToViewModel(char)
+ if err != nil {
+ t.Fatalf("MapCharacterToViewModel failed: %v", err)
+ }
+
+ pageData, err := PreparePaginatedPageData(vm, "page_2.html", 2, "2024-01-01")
+ if err != nil {
+ t.Fatalf("PreparePaginatedPageData failed: %v", err)
+ }
+
+ // SkillsLearned should contain both regular skills and weapon skills
+ // Expected: Klettern + Langschwert + Dolch = 3 learned skills
+ expectedLearnedCount := 3
+ if len(pageData.SkillsLearned) < expectedLearnedCount {
+ t.Errorf("Expected at least %d learned skills on page 2, got %d", expectedLearnedCount, len(pageData.SkillsLearned))
+ t.Log("SkillsLearned contents:")
+ for i, s := range pageData.SkillsLearned {
+ t.Logf(" %d: %s (Category: %s, Value: %d)", i, s.Name, s.Category, s.Value)
+ }
+ }
+
+ // Verify weapon skills are in SkillsLearned
+ foundLangschwert := false
+ foundDolch := false
+ for _, skill := range pageData.SkillsLearned {
+ if skill.Name == "Langschwert" {
+ foundLangschwert = true
+ }
+ if skill.Name == "Dolch" {
+ foundDolch = true
+ }
+ }
+
+ if !foundLangschwert {
+ t.Error("Langschwert weapon skill not found in page 2 SkillsLearned")
+ }
+ if !foundDolch {
+ t.Error("Dolch weapon skill not found in page 2 SkillsLearned")
+ }
+}
diff --git a/backend/templates/Default_A4_Quer/char_p1.2_stats_a4_quer.html b/backend/templates/Default_A4_Quer/html/char_p1.2_stats_a4_quer.html
similarity index 100%
rename from backend/templates/Default_A4_Quer/char_p1.2_stats_a4_quer.html
rename to backend/templates/Default_A4_Quer/html/char_p1.2_stats_a4_quer.html
diff --git a/backend/templates/Default_A4_Quer/char_p1_stats_a4_quer.html b/backend/templates/Default_A4_Quer/html/char_p1_stats_a4_quer.html
similarity index 100%
rename from backend/templates/Default_A4_Quer/char_p1_stats_a4_quer.html
rename to backend/templates/Default_A4_Quer/html/char_p1_stats_a4_quer.html
diff --git a/backend/templates/Default_A4_Quer/char_p2.2_play_a4_quer.html b/backend/templates/Default_A4_Quer/html/char_p2.2_play_a4_quer.html
similarity index 100%
rename from backend/templates/Default_A4_Quer/char_p2.2_play_a4_quer.html
rename to backend/templates/Default_A4_Quer/html/char_p2.2_play_a4_quer.html
diff --git a/backend/templates/Default_A4_Quer/char_p2_play_a4_quer.html b/backend/templates/Default_A4_Quer/html/char_p2_play_a4_quer.html
similarity index 100%
rename from backend/templates/Default_A4_Quer/char_p2_play_a4_quer.html
rename to backend/templates/Default_A4_Quer/html/char_p2_play_a4_quer.html
diff --git a/backend/templates/Default_A4_Quer/char_p3.2_spell_a4_quer.html b/backend/templates/Default_A4_Quer/html/char_p3.2_spell_a4_quer.html
similarity index 100%
rename from backend/templates/Default_A4_Quer/char_p3.2_spell_a4_quer.html
rename to backend/templates/Default_A4_Quer/html/char_p3.2_spell_a4_quer.html
diff --git a/backend/templates/Default_A4_Quer/char_p3_spell_a4_quer.html b/backend/templates/Default_A4_Quer/html/char_p3_spell_a4_quer.html
similarity index 100%
rename from backend/templates/Default_A4_Quer/char_p3_spell_a4_quer.html
rename to backend/templates/Default_A4_Quer/html/char_p3_spell_a4_quer.html
diff --git a/backend/templates/Default_A4_Quer/char_p4_equip_a4_quer.html b/backend/templates/Default_A4_Quer/html/char_p4_equip_a4_quer.html
similarity index 100%
rename from backend/templates/Default_A4_Quer/char_p4_equip_a4_quer.html
rename to backend/templates/Default_A4_Quer/html/char_p4_equip_a4_quer.html
diff --git a/backend/templates/Default_A4_Quer/page_2.html b/backend/templates/Default_A4_Quer/page_2.html
index 86c4e04..e8a4d1e 100644
--- a/backend/templates/Default_A4_Quer/page_2.html
+++ b/backend/templates/Default_A4_Quer/page_2.html
@@ -42,13 +42,13 @@
Abwehr + {{.DerivedValues.Abwehr}}+{{.DerivedValues.AbwehrBonus}}
-
+ mit Vert.
waffe
+
+ mit Vert. waffe
Resistenz + {{.DerivedValues.ResistenzKoerper}}+{{.DerivedValues.ResistenzBonusKoerper}}/{{.DerivedValues.ResistenzGeist}}+{{.DerivedValues.ResistenzBonusGeist}}
Zaubern + {{.DerivedValues.Zaubern}}+{{.DerivedValues.ZauberBonus}}
-
+
| Fertigkeit |
@@ -78,7 +78,7 @@
| Schwimmen+(3) | Wahrnehmung+(6) |
| Seilkunst+(3) | |
-
+
| Fertigkeit |
@@ -140,7 +140,7 @@