ExpiryDatesManager/server/controllers/reportsController.go
2019-01-13 21:09:49 +01:00

101 lines
2.5 KiB
Go

package controllers
import (
"strconv"
"encoding/json"
"github.com/gorilla/mux"
"ExpiryDatesManager/server/model"
"ExpiryDatesManager/server/utils"
"net/http"
)
type CreateReport struct {
Report model.Report
ReportPositions []model.ReportPosition
}
var GetReportsForCompany = func(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
companyID, err := strconv.ParseUint(vars["companyId"], 10, 0)
if err != nil {
utils.Respond(w, utils.Message(false, "Error while decoding request body"))
return
}
data := model.GetReportsForCompany(uint(companyID))
resp := utils.Message(true, "success")
resp["data"] = data
utils.Respond(w, resp)
}
var GetReport = func(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
reportID, err := strconv.ParseUint(vars["reportId"], 10, 0)
if err != nil {
utils.Respond(w, utils.Message(false, "Error while decoding request body"))
return
}
report := model.GetReport(uint(reportID))
positions := model.GetReportPositionsForReport(uint(reportID))
resp := utils.Message(true, "success")
resp["data"] = positions
resp["report"] = report
utils.Respond(w, resp)
}
var GetReportWithPositions = func(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
reportID, err := strconv.ParseUint(vars["reportId"], 10, 0)
if err != nil {
utils.Respond(w, utils.Message(false, "Error while decoding request body"))
return
}
data := model.GetReportPositionsForReport(uint(reportID))
resp := utils.Message(true, "success")
resp["data"] = data
utils.Respond(w, resp)
}
var GetReports = func(w http.ResponseWriter, r *http.Request) {
data := model.GetReports()
resp := utils.Message(true, "success")
resp["data"] = data
utils.Respond(w, resp)
}
var CreateOrUpdateReport = func(w http.ResponseWriter, r *http.Request) {
createReport := &CreateReport{}
err := json.NewDecoder(r.Body).Decode(createReport)
if err != nil {
utils.Respond(w, utils.Message(false, "Error while decoding request body"))
return
}
data := createReport.Report.CreateOrUpdate()
if data.ID == 0 {
utils.Respond(w, utils.Message(false, "Database error with creating report"))
return
}
for _, element := range createReport.ReportPositions {
model.MarkAsUsed(element.ProductExpiryPositionID)
element.ReportID = data.ID
position := element.CreateOrUpdate()
if position.ID == 0 {
utils.Respond(w, utils.Message(false, "Database error with creating report position"))
return
}
}
resp := utils.Message(true, "success")
utils.Respond(w, resp)
}