diff --git a/api/purchase.go b/api/purchase.go index 9c8864f97bd51b0cc80b06cfad430954a1785127..270bc3badc3712cf68df0355bd62e35040f4a2ab 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 e176e190e9e7e9135c25e67f23590a1ed3b45f0f..3e979cb8c5183c6ee92cd21f0d47f512a57e3dc9 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 c52de0e5af50a86ee6860a81af3355dc4fbbdf4e..a5e16defcec88e5ad78e018e88cee50656ea55e1 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() {