refactor: seperate code into different files
This commit is contained in:
parent
2f6f0b4efd
commit
997cc11a89
16 changed files with 845 additions and 364 deletions
188
app.go
Normal file
188
app.go
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"github.com/jung-kurt/gofpdf"
|
||||
"github.com/wailsapp/wails/v2/pkg/runtime"
|
||||
)
|
||||
|
||||
type App struct {
|
||||
ctx context.Context
|
||||
bewertungen []Bewertung
|
||||
maxPunkte MaxPunkte
|
||||
}
|
||||
|
||||
func NewApp() *App {
|
||||
return &App{
|
||||
bewertungen: make([]Bewertung, 0),
|
||||
maxPunkte: MaxPunkte{
|
||||
HvMax: 0.00,
|
||||
HvGewichtung: 0.00,
|
||||
LvMax: 0.00,
|
||||
LvGewichtung: 0.00,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) startup(ctx context.Context) {
|
||||
a.ctx = ctx
|
||||
}
|
||||
|
||||
func (a *App) OpenSaveDialog() (string, error) {
|
||||
return runtime.SaveFileDialog(a.ctx, runtime.SaveDialogOptions{
|
||||
DefaultFilename: "bewertungen.pdf",
|
||||
Filters: []runtime.FileFilter{
|
||||
{DisplayName: "PDF Files (*.pdf)", Pattern: "*.pdf"},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func (a *App) GetBewertungen() []Bewertung {
|
||||
return a.bewertungen
|
||||
}
|
||||
|
||||
func (a *App) GetMaxPunkte() MaxPunkte {
|
||||
return a.maxPunkte
|
||||
}
|
||||
|
||||
func (a *App) ToggleWertung(id int) Bewertung {
|
||||
var updatedBewertung Bewertung
|
||||
for i, bewertung := range a.bewertungen {
|
||||
if bewertung.ID == id {
|
||||
a.bewertungen[i].Gewertet = !bewertung.Gewertet
|
||||
updatedBewertung = a.bewertungen[i]
|
||||
break
|
||||
}
|
||||
}
|
||||
return updatedBewertung
|
||||
}
|
||||
|
||||
func (a *App) AddBewertung(vorname, nachname string, hvPunkte, lvPunkte float64) bool {
|
||||
if !a.validateName(vorname, nachname) {
|
||||
return false
|
||||
}
|
||||
|
||||
hvProzent := 100.00 / a.maxPunkte.HvMax * hvPunkte
|
||||
lvProzent := 100.00 / a.maxPunkte.LvMax * lvPunkte
|
||||
hvNote := setNote(hvProzent)
|
||||
lvNote := setNote(lvProzent)
|
||||
gesamtProzent := hvProzent*a.maxPunkte.HvGewichtung/100 + lvProzent*a.maxPunkte.LvGewichtung/100
|
||||
gesamtNote := setNote(gesamtProzent)
|
||||
|
||||
bewertung := Bewertung{
|
||||
ID: len(a.bewertungen) + 1,
|
||||
Vorname: vorname,
|
||||
Nachname: nachname,
|
||||
HvPunkte: hvPunkte,
|
||||
HvProzent: hvProzent,
|
||||
HvNote: int(hvNote),
|
||||
LvPunkte: lvPunkte,
|
||||
LvProzent: lvProzent,
|
||||
LvNote: int(lvNote),
|
||||
GesamtProzent: gesamtProzent,
|
||||
GesamtNote: int(gesamtNote),
|
||||
Gewertet: true,
|
||||
}
|
||||
|
||||
a.bewertungen = append(a.bewertungen, bewertung)
|
||||
return true
|
||||
}
|
||||
|
||||
func (a *App) SetMaxPunkte(hvMax, lvMax, hvGewichtung, lvGewichtung float64) bool {
|
||||
if !checkGewichtung(lvGewichtung, hvGewichtung) {
|
||||
return false
|
||||
}
|
||||
|
||||
a.maxPunkte = MaxPunkte{
|
||||
HvMax: hvMax,
|
||||
LvMax: lvMax,
|
||||
HvGewichtung: hvGewichtung,
|
||||
LvGewichtung: lvGewichtung,
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (a *App) ExportBewertungen(path string) error {
|
||||
pdf := gofpdf.New("P", "mm", "A4", "")
|
||||
pdf.AddPage()
|
||||
|
||||
// Bewertungen exportieren
|
||||
pdf.SetFont("Arial", "B", 16)
|
||||
pdf.CellFormat(0, 10, "Bewertungen", "", 1, "C", false, 0, "")
|
||||
pdf.Ln(5)
|
||||
|
||||
pdf.SetFont("Arial", "B", 12)
|
||||
pdf.CellFormat(27, 10, "Vorname", "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, "Nachname", "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, "HV-Punkte", "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, "HV-Note", "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, "LV-Punkte", "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, "LV-Note", "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, "Gesamtnote", "1", 0, "", false, 0, "")
|
||||
pdf.Ln(-1)
|
||||
|
||||
pdf.SetFont("Arial", "", 11)
|
||||
for _, bewertung := range a.bewertungen {
|
||||
if bewertung.Gewertet {
|
||||
pdf.CellFormat(27, 10, bewertung.Vorname, "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, bewertung.Nachname, "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, strconv.FormatFloat(bewertung.HvPunkte, 'f', 2, 64), "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, strconv.FormatInt(int64(bewertung.HvNote), 10), "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, strconv.FormatFloat(bewertung.LvPunkte, 'f', 2, 64), "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, strconv.FormatInt(int64(bewertung.LvNote), 10), "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(27, 10, strconv.FormatInt(int64(bewertung.GesamtNote), 10), "1", 0, "", false, 0, "")
|
||||
pdf.Ln(-1)
|
||||
}
|
||||
}
|
||||
|
||||
pdf.AddPage()
|
||||
pdf.SetFont("Arial", "B", 16)
|
||||
pdf.CellFormat(0, 10, "Notenspiegel", "", 1, "C", false, 0, "")
|
||||
pdf.Ln(5)
|
||||
|
||||
notenspiegel := a.GetNotenspiegel()
|
||||
|
||||
pdf.SetFont("Arial", "B", 12)
|
||||
pdf.CellFormat(30, 10, "Note", "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(30, 10, "Anzahl", "1", 0, "", false, 0, "")
|
||||
pdf.Ln(-1)
|
||||
|
||||
pdf.SetFont("Arial", "", 11)
|
||||
for note := 1; note <= 6; note++ {
|
||||
anzahl := notenspiegel[note]
|
||||
pdf.CellFormat(30, 10, strconv.Itoa(note), "1", 0, "", false, 0, "")
|
||||
pdf.CellFormat(30, 10, strconv.Itoa(anzahl), "1", 0, "", false, 0, "")
|
||||
pdf.Ln(-1)
|
||||
}
|
||||
|
||||
err := pdf.OutputFileAndClose(path)
|
||||
if err != nil {
|
||||
fmt.Println("Fehler beim Exportieren der Bewertungen:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
runtime.EventsEmit(a.ctx, "export-complete")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *App) GetNotenspiegel() map[int]int {
|
||||
notenspiegel := make(map[int]int)
|
||||
|
||||
for _, bewertung := range a.bewertungen {
|
||||
notenspiegel[bewertung.GesamtNote]++
|
||||
}
|
||||
|
||||
return notenspiegel
|
||||
}
|
||||
|
||||
func (a *App) validateName(vorname, nachname string) bool {
|
||||
for _, bewertung := range a.bewertungen {
|
||||
if bewertung.Nachname == nachname && bewertung.Vorname == vorname {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue