Implemented design and most of the calculations

This commit is contained in:
Patryk Hegenberg 2023-10-30 10:54:57 +01:00
parent 75c4d7500c
commit ced5a9f75b

277
main.go
View file

@ -4,16 +4,52 @@ import (
"database/sql"
"fmt"
"log"
"math"
"strconv"
"time"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/driver/mobile"
"fyne.io/fyne/v2/widget"
_ "github.com/mattn/go-sqlite3"
)
type numericalEntry struct {
widget.Entry
}
func newNumericalEntry() *numericalEntry {
entry := &numericalEntry{}
entry.ExtendBaseWidget(entry)
return entry
}
func (e *numericalEntry) TypedRune(r rune) {
if (r >= '0' && r <= '9') || r == '.' || r == ',' {
e.Entry.TypedRune(r)
}
}
func (e *numericalEntry) TypedShortcut(shortcut fyne.Shortcut) {
paste, ok := shortcut.(*fyne.ShortcutPaste)
if !ok {
e.Entry.TypedShortcut(shortcut)
return
}
content := paste.Clipboard.Content()
if _, err := strconv.ParseFloat(content, 64); err == nil {
e.Entry.TypedShortcut(shortcut)
}
}
func (e *numericalEntry) Keyboard() mobile.KeyboardType {
return mobile.NumberKeyboard
}
func main() {
myApp := app.New()
myWindow := myApp.NewWindow("Tagesabrechnung")
@ -74,7 +110,6 @@ func main() {
// Daten aus der Datenbank in eine Liste konvertieren
var data [][]string
for rows.Next() {
fmt.Println("In der Schleife")
var id sql.NullInt64
var datum string
var einzahlung, tagesbilanz, bargeld float64
@ -94,6 +129,21 @@ func main() {
data = append(data, []string{idString, datum, fmt.Sprintf("%.2f", einzahlung), fmt.Sprintf("%.2f", tagesbilanz), fmt.Sprintf("%.2f", bargeld)})
}
lastBilanz := ""
last, err := db.Query("SELECT tagesbilanz FROM abrechnungen ORDER BY datum DESC Limit 1")
if err != nil {
log.Fatal("Can't query last entry ", err)
}
defer last.Close()
for last.Next() {
var tagesbilanz float64
err := last.Scan(&tagesbilanz)
if err != nil {
log.Fatal(err)
}
lastBilanz = fmt.Sprintf("%.2f", tagesbilanz)
}
fmt.Println(lastBilanz)
// Funktion zur Erstellung leerer CanvasObject für die Tabelle
createEmptyTableCell := func() fyne.CanvasObject {
return widget.NewLabel(".....................")
@ -113,16 +163,40 @@ func main() {
createEmptyTableCell, // Leere CanvasObject-Funktion
createTableCell, // Funktion zur Erstellung der Zelleninhalte
)
muenzgeld := widget.NewEntry()
fuenfScheine := widget.NewEntry()
zehnScheine := widget.NewEntry()
zwanzigScheine := widget.NewEntry()
fuenfzigScheine := widget.NewEntry()
hundertScheine := widget.NewEntry()
zweiHundertScheine := widget.NewEntry()
papierGesamt := widget.NewEntry()
barGesamt := widget.NewEntry()
ecGesamt := widget.NewEntry()
papierGesamt := newNumericalEntry()
papierGesamt.SetPlaceHolder("0.00")
barGesamt := newNumericalEntry()
barGesamt.SetPlaceHolder("0.00")
ecGesamt := newNumericalEntry()
ecGesamt.SetPlaceHolder("0.00")
summeRollen := newNumericalEntry()
summeRollen.SetPlaceHolder("0.00")
summeKarte := newNumericalEntry()
summeKarte.SetPlaceHolder("0.00")
zBon := newNumericalEntry()
sonderAus := newNumericalEntry()
sonderEin := newNumericalEntry()
stornoViel := newNumericalEntry()
stornoWenig := newNumericalEntry()
papierZurueck := newNumericalEntry()
einzahlung := newNumericalEntry()
tagesbilanz := newNumericalEntry()
muenzgeld := newNumericalEntry()
muenzgeld.SetPlaceHolder("0.00")
fuenfScheine := newNumericalEntry()
fuenfScheine.SetPlaceHolder("0")
zehnScheine := newNumericalEntry()
zehnScheine.SetPlaceHolder("0")
zwanzigScheine := newNumericalEntry()
zwanzigScheine.SetPlaceHolder("0")
fuenfzigScheine := newNumericalEntry()
fuenfzigScheine.SetPlaceHolder("0")
hundertScheine := newNumericalEntry()
hundertScheine.SetPlaceHolder("0")
zweiHundertScheine := newNumericalEntry()
zweiHundertScheine.SetPlaceHolder("0")
form := &widget.Form{
Items: []*widget.FormItem{
@ -137,19 +211,8 @@ func main() {
{Text: "Gesamtes Bargeld:", Widget: barGesamt},
{Text: "Gesamtes Bargeld mit EC:", Widget: ecGesamt},
},
OnSubmit: func() {
log.Println("Form submitted:", muenzgeld.Text)
},
}
summeRollen := widget.NewEntry()
summeKarte := widget.NewEntry()
zBon := widget.NewEntry()
sonderAus := widget.NewEntry()
sonderEin := widget.NewEntry()
stornoViel := widget.NewEntry()
stornoWenig := widget.NewEntry()
form2 := &widget.Form{
Items: []*widget.FormItem{
{Text: "Summe Rollengeld", Widget: summeRollen},
@ -162,20 +225,23 @@ func main() {
},
}
papierZurueck := widget.NewEntry()
einzahlung := widget.NewEntry()
tagesbilanz := widget.NewEntry()
form3 := &widget.Form{
Items: []*widget.FormItem{
{Text: "Papiergeld zurück in die Kasse", Widget: papierZurueck},
{Text: "Einzahlung auf Konto", Widget: einzahlung},
{Text: "Tagesbilanz vgl- Einnahme zu zBon", Widget: tagesbilanz},
},
OnSubmit: func() {
updateBarGesamt(summeRollen.Text, muenzgeld.Text, fuenfScheine.Text, zehnScheine.Text, zwanzigScheine.Text, fuenfzigScheine.Text, hundertScheine.Text, zweiHundertScheine.Text, barGesamt)
updatePapierGesamt(fuenfScheine.Text, zehnScheine.Text, zwanzigScheine.Text, fuenfzigScheine.Text, hundertScheine.Text, zweiHundertScheine.Text, papierGesamt)
updateEcGesamt(barGesamt.Text, summeKarte.Text, ecGesamt)
calcTagesbilanz(ecGesamt.Text, zBon.Text, sonderAus.Text, sonderEin.Text, stornoWenig.Text, stornoViel.Text, lastBilanz, tagesbilanz)
zurueckKasse(muenzgeld.Text, summeRollen.Text, papierZurueck)
},
}
// Flexibles Layout erstellen und die Tabelle hinzufügen
forms := container.NewHBox(form, form2, form3)
forms := container.NewGridWithColumns(3, form, form2, form3)
formBox := widget.NewCard("Neuer Eintrag", "", forms)
tableBox := widget.NewCard("Einträge", "", table)
mainContent := container.NewVBox(
@ -201,3 +267,160 @@ func tableExists(db *sql.DB, tableName string) bool {
}
return true
}
func updateBarGesamt(rollen, muenz, fuenf, zehn, zwanzig, fuenfzig, hundert, zweihundert string, barGesamt fyne.Widget) error {
fmt.Println(rollen)
rollenf, err := convertToFloat(rollen)
if err != nil {
log.Fatal("Error converting Rollengeld", err)
}
muenzf, err := convertToFloat(muenz)
if err != nil {
log.Fatal("Error converting Münzgeld", err)
}
fuenff, err := convertToInt(fuenf)
if err != nil {
log.Fatal("Error converting Fünf", err)
}
zehnf, err := convertToInt(zehn)
if err != nil {
log.Fatal("Error converting Zehn", err)
}
zwanzigf, err := convertToInt(zwanzig)
if err != nil {
log.Fatal("Error converting Zwanzig", err)
}
fuenfzigf, err := convertToInt(fuenfzig)
if err != nil {
log.Fatal("Error converting Fünfzig", err)
}
hundertf, err := convertToInt(hundert)
if err != nil {
log.Fatal("Error converting Hundert", err)
}
zweihundertf, err := convertToInt(zweihundert)
if err != nil {
log.Fatal("Error converting Zweihundert", err)
}
result := rollenf + muenzf + float64(fuenff*5) + float64(zehnf*10) + float64(zwanzigf*20) + float64(fuenfzigf*50) + float64(hundertf*100) + float64(zweihundertf*200)
barGesamt.(*numericalEntry).SetText(fmt.Sprintf("%.2f", result))
return nil
}
func updatePapierGesamt(fuenf, zehn, zwanzig, fuenfzig, hundert, zweihundert string, papierGesamt fyne.Widget) error {
fuenff, err := convertToInt(fuenf)
if err != nil {
log.Fatal("Error converting Fünf", err)
}
zehnf, err := convertToInt(zehn)
if err != nil {
log.Fatal("Error converting Zehn", err)
}
zwanzigf, err := convertToInt(zwanzig)
if err != nil {
log.Fatal("Error converting Zwanzig", err)
}
fuenfzigf, err := convertToInt(fuenfzig)
if err != nil {
log.Fatal("Error converting Fünfzig", err)
}
hundertf, err := convertToInt(hundert)
if err != nil {
log.Fatal("Error converting Hundert", err)
}
zweihundertf, err := convertToInt(zweihundert)
if err != nil {
log.Fatal("Error converting Zweihundert", err)
}
result := float64(fuenff*5) + float64(zehnf*10) + float64(zwanzigf*20) + float64(fuenfzigf*50) + float64(hundertf*100) + float64(zweihundertf*200)
papierGesamt.(*numericalEntry).SetText(fmt.Sprintf("%.2f", result))
return nil
}
func updateEcGesamt(bar, ec string, ecGesamt fyne.Widget) error {
barf, err := convertToFloat(bar)
if err != nil {
log.Fatal("Error converting BarGesamt", err)
}
ecf, err := convertToFloat(ec)
if err != nil {
log.Fatal("Error converting EC", err)
}
result := barf + ecf
ecGesamt.(*numericalEntry).SetText(fmt.Sprintf("%.2f", result))
return nil
}
func convertToFloat(text string) (float64, error) {
if text != "" {
result, err := strconv.ParseFloat(text, 64)
if err != nil {
log.Fatal(err)
}
return result, nil
}
return 0.00, nil
}
func convertToInt(text string) (int, error) {
if text != "" {
result, err := strconv.Atoi(text)
if err != nil {
log.Fatal(err)
return 0.00, err
}
return result, nil
}
return 0.00, nil
}
func calcTagesbilanz(ecGesamt, zBon, sonderOut, sonderIn, stornoWenig, stornoViel, last string, tagesbilanz fyne.Widget) error {
ecGesamtf, err := convertToFloat(ecGesamt)
if err != nil {
log.Fatal(err)
}
zBonf, err := convertToFloat(ecGesamt)
if err != nil {
log.Fatal(err)
}
sonderOutf, err := convertToFloat(ecGesamt)
if err != nil {
log.Fatal(err)
}
sonderInf, err := convertToFloat(ecGesamt)
if err != nil {
log.Fatal(err)
}
stornoWenigf, err := convertToFloat(ecGesamt)
if err != nil {
log.Fatal(err)
}
stornoVielf, err := convertToFloat(ecGesamt)
if err != nil {
log.Fatal(err)
}
lastf, err := convertToFloat(ecGesamt)
if err != nil {
log.Fatal(err)
}
result := ecGesamtf + lastf - zBonf + sonderOutf - sonderInf - stornoWenigf + stornoVielf
tagesbilanz.(*numericalEntry).SetText(fmt.Sprintf("%.2f", result))
return nil
}
func zurueckKasse(muenz, rollen string, zurueck fyne.Widget) error {
muenzf, err := convertToFloat(muenz)
if err != nil {
log.Fatal(err)
}
rollenf, err := convertToFloat(rollen)
if err != nil {
log.Fatal(err)
}
result := 300.00 - muenzf - rollenf
zurueckKasse := float64(math.Floor((result / 5)) * 5)
zurueck.(*numericalEntry).SetText(fmt.Sprintf("%.2f", zurueckKasse))
return nil
}