From a61e057cfb5cd3613d070208fc508e3436591a68 Mon Sep 17 00:00:00 2001 From: Luca Date: Mon, 6 Mar 2023 00:42:51 +0100 Subject: [PATCH] Calculate per-category sub-totals --- internal/pretix/order_placed.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/internal/pretix/order_placed.go b/internal/pretix/order_placed.go index 77787f2..7ef6105 100644 --- a/internal/pretix/order_placed.go +++ b/internal/pretix/order_placed.go @@ -23,6 +23,8 @@ const ( var adverbs = []string{" Außerdem ", " Zusätzlich ", " Weiterhin ", " Des Weiteren "} type categoryBin struct { + Cents uint + Euros uint NumFree uint NumPaid uint } @@ -77,7 +79,6 @@ func (s Server) orderPlaced(w http.ResponseWriter, r *http.Request) { Item uint Price string } - Total string }{} err = decoder.Decode(&order) @@ -111,6 +112,12 @@ func (s Server) orderPlaced(w http.ResponseWriter, r *http.Request) { category := categories[name] if euros > 0 || cents > 0 { + category.Cents += cents + if carry := category.Cents / 100; carry > 0 { + category.Cents -= carry * 100 + category.Euros += carry + } + category.Euros += euros category.NumPaid++ } else { category.NumFree++ @@ -154,15 +161,15 @@ func (s Server) orderPlaced(w http.ResponseWriter, r *http.Request) { preposition = `aus der Kategorie "` quote = `" ` } - if totalEuros, totalCents, err := parsePrice(order.Total); err == nil && (totalEuros > 0 || totalCents > 0) { + if bin.Euros > 0 || bin.Cents > 0 { var adverb, fraction string if bin.NumPaid > 1 { adverb = "insgesamt " } - if totalCents > 0 { - fraction = fmt.Sprintf(",%02d", totalCents) + if bin.Cents > 0 { + fraction = fmt.Sprintf(",%02d", bin.Cents) } - total = fmt.Sprint("für ", adverb, totalEuros, fraction, " Euro ") + total = fmt.Sprint("für ", adverb, bin.Euros, fraction, " Euro ") } body.WriteString(fmt.Sprint(adverb, verb, free, conjunction, paid, noun, preposition, category, quote, total, "bestellt."))