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) }