From 4618bd72858a7efe34a1467d981bd7a1be411c0d Mon Sep 17 00:00:00 2001 From: meskio <meskio@sindominio.net> Date: Mon, 28 Sep 2020 19:25:35 +0200 Subject: [PATCH] Set the total of purchases negative --- api/purchase.go | 44 ++++++++++++++++++++++++------------------ api/purchase_test.go | 2 +- src/TransactionList.js | 2 +- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/api/purchase.go b/api/purchase.go index 9c8864f..270bc3b 100644 --- a/api/purchase.go +++ b/api/purchase.go @@ -40,24 +40,9 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) { purchase[i].Price = product.Price } - var member Member - err = a.db.Where("num = ?", num).Find(&member).Error - if err != nil { - log.Printf("Can't find member %d: %v", num, err) - w.WriteHeader(http.StatusNotAcceptable) - return - } - if member.Balance < total { - log.Printf("Member %d don't have enough money (%d-%d)", num, member.Balance, total) - w.WriteHeader(http.StatusBadRequest) - return - } - err = a.db.Model(&Member{}). - Where("num = ?", num). - Update("balance", gorm.Expr("balance - ?", total)).Error - if err != nil { - log.Printf("Can't update update member balance %d-%d: %v", num, total, err) - w.WriteHeader(http.StatusNotAcceptable) + httpStatus := a.substractMemberBalance(num, total) + if httpStatus != http.StatusOK { + w.WriteHeader(httpStatus) return } @@ -66,7 +51,7 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) { Date: time.Now(), Purchase: purchase, Type: "purchase", - Total: total, + Total: -total, } err = a.db.Create(&transaction).Error if err != nil { @@ -93,3 +78,24 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) { } } + +func (a *api) substractMemberBalance(num int, total int) int { + var member Member + err := a.db.Where("num = ?", num).Find(&member).Error + if err != nil { + log.Printf("Can't find member %d: %v", num, err) + return http.StatusNotAcceptable + } + if member.Balance < total { + log.Printf("Member %d don't have enough money (%d-%d)", num, member.Balance, total) + return http.StatusBadRequest + } + err = a.db.Model(&Member{}). + Where("num = ?", num). + Update("balance", gorm.Expr("balance - ?", total)).Error + if err != nil { + log.Printf("Can't update update member balance %d-%d: %v", num, total, err) + return http.StatusNotAcceptable + } + return http.StatusOK +} diff --git a/api/purchase_test.go b/api/purchase_test.go index e176e19..3e979cb 100644 --- a/api/purchase_test.go +++ b/api/purchase_test.go @@ -30,7 +30,7 @@ func TestPurchaseAddListMine(t *testing.T) { if len(transactions) != 1 { t.Fatal("Wrong number of transactions", len(transactions), transactions) } - if transactions[0].Total != testProduct.Price*products[0].Ammount { + if transactions[0].Total != -testProduct.Price*products[0].Ammount { t.Error("Wrong total:", transactions[0].Total) } if len(transactions[0].Purchase) != 1 { diff --git a/src/TransactionList.js b/src/TransactionList.js index c52de0e..a5e16de 100644 --- a/src/TransactionList.js +++ b/src/TransactionList.js @@ -16,7 +16,7 @@ const columns = [ }; }}, {dataField: 'date', text: 'Fecha', formatter: printDate}, - {dataField: 'total', text: 'Total', formatter: cell => printMoney(cell)+" €"}, + {dataField: 'total', text: 'Cantidad', formatter: cell => printMoney(cell)+" €"}, ] function TransactionList() { -- GitLab